diff --git a/open-api/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java b/open-api/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java index d7b9ccc..169289b 100644 --- a/open-api/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java +++ b/open-api/src/main/java/com/iformall/interceptor/AuthorizationInterceptor.java @@ -38,9 +38,6 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - if (true) { - return true; - } response.setHeader("Content-type", "application/json;charset=UTF-8"); diff --git a/suimangAdmin/src/main/java/com/iformall/config/MyAuthenticationToken.java b/suimangAdmin/src/main/java/com/iformall/config/MyAuthenticationToken.java new file mode 100644 index 0000000..49a55f1 --- /dev/null +++ b/suimangAdmin/src/main/java/com/iformall/config/MyAuthenticationToken.java @@ -0,0 +1,55 @@ +package com.iformall.config; + +import org.apache.shiro.authc.AuthenticationToken; + +public class MyAuthenticationToken implements AuthenticationToken{ + + private Integer projectType; + private String username; + private char[] password; + + public Integer getProjectType() { + return projectType; + } + + public void setProjectType(Integer projectType) { + this.projectType = projectType; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public char[] getPassword() { + return password; + } + + public void setPassword(char[] password) { + this.password = password; + } + + @Override + public Object getPrincipal() { + return getUsername(); + } + + @Override + public Object getCredentials() { + return getPassword(); + } + + public MyAuthenticationToken() { + + } + + public MyAuthenticationToken(Integer projectType, String username, char[] password) { + this.projectType = projectType; + this.username = username; + this.password = password; + } + +} diff --git a/suimangAdmin/src/main/java/com/iformall/controller/basic/WxProjectConfigController.java b/suimangAdmin/src/main/java/com/iformall/controller/basic/WxProjectConfigController.java index e4defb0..c6fa3e5 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/basic/WxProjectConfigController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/basic/WxProjectConfigController.java @@ -426,10 +426,10 @@ public class WxProjectConfigController extends BaseController { } boolean bChangedPhone = false; if(userInfo.getId() == null){ - if(userInfoService.cntByUserName(userInfo.getUsername()) > 0){ + if(userInfoService.cntByUserName(userInfo.getUsername(),EnumProject.PROJECT_2.getCode()) > 0){ return new ResultData(ErrorCode.USER_NAME_IS_FOUND.getCode(),"用户名已存在"); } - if(userInfoService.cntByUserPhone(userInfo.getPhone()) > 0){ + if(userInfoService.cntByUserPhone(userInfo.getPhone(),EnumProject.PROJECT_2.getCode()) > 0){ return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在"); } Assert.notNull(userInfo.getPassword(), "密码不能为空"); @@ -442,12 +442,12 @@ public class WxProjectConfigController extends BaseController { }else{ MallUserInfo oldUser = userInfoService.getById(userInfo.getId()); if (!oldUser.getUsername().equals(userInfo.getUsername())) { - if(userInfoService.cntByUserName(userInfo.getUsername()) > 0){ + if(userInfoService.cntByUserName(userInfo.getUsername(),EnumProject.PROJECT_2.getCode()) > 0){ return new ResultData(ErrorCode.USER_NAME_IS_FOUND.getCode(),"用户名已存在"); } } if (!oldUser.getPhone().equals(userInfo.getPhone())) { - if(userInfoService.cntByUserPhone(userInfo.getPhone()) > 0){ + if(userInfoService.cntByUserPhone(userInfo.getPhone(),EnumProject.PROJECT_2.getCode()) > 0){ return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在"); } bChangedPhone = true; diff --git a/suimangAdmin/src/main/java/com/iformall/controller/msg/WxMsgValidationcodeController.java b/suimangAdmin/src/main/java/com/iformall/controller/msg/WxMsgValidationcodeController.java index 5a9d1d7..afb430a 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/msg/WxMsgValidationcodeController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/msg/WxMsgValidationcodeController.java @@ -7,6 +7,7 @@ import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; import com.iformall.domain.po.WxMsgValidationcode; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumProject; import com.iformall.service.WxMsgValidationcodeService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -87,7 +88,7 @@ public class WxMsgValidationcodeController extends BaseController { wxMsgValidationcode.setParentTenantId(parentTenantId); wxMsgValidationcode.setPhone(phone); wxMsgValidationcode.setType(type); - return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode); + return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode,EnumProject.PROJECT_2.getCode()); } @GetMapping("hasvalidationcode") diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sm/ServiceInfoController.java b/suimangAdmin/src/main/java/com/iformall/controller/sm/ServiceInfoController.java index 3da3f8c..cc4d018 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sm/ServiceInfoController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sm/ServiceInfoController.java @@ -10,8 +10,10 @@ import com.iformall.controller.base.BaseController; import com.iformall.domain.dto.sm.SaveServiceInfoDTO; import com.iformall.domain.dto.sm.UpdateServiceInfoDTO; import com.iformall.domain.dto.sm.UpdateServiceInfoStatusDTO; +import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.sm.ServiceInfo; import com.iformall.exception.BizException; +import com.iformall.service.MallUserInfoService; import com.iformall.service.sm.ServiceInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,6 +29,9 @@ public class ServiceInfoController extends BaseController { @Autowired private ServiceInfoService serviceInfoService; + + @Autowired + private MallUserInfoService mallUserInfoService; @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("分页查询合作商") @@ -52,6 +57,14 @@ public class ServiceInfoController extends BaseController { serviceInfoService.saveServiceInfo(dto); return R.ok(); } + + @ApiVersion(group = SwaggerConstant.V_1_0_0) + @ApiOperation("新增登录账号") + @PostMapping("/saveMallUserInfo") + public R saveMallUserInfo(@RequestBody MallUserInfo dto) { + mallUserInfoService.saveOrUpdate(dto); + return R.ok(); + } @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("修改合作商") diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sys/HomeController.java b/suimangAdmin/src/main/java/com/iformall/controller/sys/HomeController.java index 8923a08..d12ba04 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sys/HomeController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sys/HomeController.java @@ -8,6 +8,7 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.constant.SwaggerConstant; import com.iformall.controller.base.BaseController; +import com.iformall.controller.sys.mallUserInfo.MallUserInfoBaseController; import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.MallUserInfoVo; @@ -54,7 +55,7 @@ import java.util.Map; @RestController @Api(description = "登录相关接口") -public class HomeController extends BaseController { +public class HomeController extends MallUserInfoBaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Value("${version}") @@ -63,16 +64,6 @@ public class HomeController extends BaseController { @Autowired private Producer producer; - @Autowired - private MallUserInfoService mallUserInfoService; - - @Autowired - private WxMsgValidationcodeService wxMsgValidationcodeService; - - @Autowired - private MallUserActionService mallUserActionService; - - @Autowired @Qualifier("objectCommonRedisTemplate") RedisTemplate redisTemplate; @@ -90,9 +81,9 @@ public class HomeController extends BaseController { //生成图片验证码 BufferedImage image = producer.createImage(text); //保存到shiro session -// ShiroUtils.setSessionAttribute(Constants.KAPTCHA_SESSION_KEY, text); - String key = Constant.captchaPrev + ":" + getIpAddr(); - RedisCacheUtils.cache(redisTemplate, key, text, 60); + ShiroUtils.setSessionAttribute(Constants.KAPTCHA_SESSION_KEY, text); +// String key = Constant.captchaPrev + ":" + getIpAddr(); +// RedisCacheUtils.cache(redisTemplate, key, text, 60); logger.info("验证码接口-生成的验证码:{}", text); ServletOutputStream out = response.getOutputStream(); @@ -101,181 +92,24 @@ public class HomeController extends BaseController { } @ApiVersion(group = SwaggerConstant.V_1_0_0) - @ApiOperation("登录") + @ApiOperation("慧影登录") @PostMapping("/doLogin") public ResultData login(@RequestBody MallUserInfo user, HttpServletResponse response) { - String ipaddress = getIpAddr(); - logger.debug("[" + ipaddress + "] HomeController::doLogin"); -// try { -// String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY); -// logger.info("登录接口-验证码:{}", user.getCaptcha()); -// logger.info("登录接口-生成的验证码:{}", kaptcha); -// if(!user.getCaptcha().equalsIgnoreCase(kaptcha)){ -// return new ResultData(ErrorCode.KAPCHA_NOT_EQUAL); -// } -// } catch (MallinkException e) { -// logger.error("验证码" + e.getMessage()); -// return new ResultData(ErrorCode.KAPCHA_NOT_VALID.getCode(), e.getMessage()); -// } - String key = Constant.captchaPrev + ":" + getIpAddr(); - String code = RedisCacheUtils.getCacheString(redisTemplate, key); - if (StringUtils.isBlank(code)) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码已过期"); - } - if (!code.equals(user.getCaptcha())) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码不正确"); - } - - - if (StringUtils.isBlank(user.getUsername()) || StringUtils.isBlank(user.getPassword())) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); - } - // check user - MallUserInfo userCheck = mallUserInfoService.getByUsername(user.getUsername()); - if(userCheck == null) { - logger.error(ErrorCode.USER_IS_EMPTY.getMessage()); - return new ResultData(ErrorCode.USER_IS_EMPTY); - } - if(userCheck.getStatus().equals(EnumMallUserStatus.NOT_VALID.getCode())) { - logger.error(ErrorCode.USER_IS_LOCKED.getMessage()); - return new ResultData(ErrorCode.USER_IS_LOCKED); - } - boolean isLogin = false; - try { - Subject subject = SecurityUtils.getSubject(); - UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword()); - subject.login(token); - isLogin = true; - logger.info("ADMIN USER:"+user.getUsername() + ", password:" + user.getPassword()); - } catch (UnknownAccountException e) { - logger.error(e.getMessage()); - return new ResultData(ErrorCode.USER_IS_EMPTY); - } catch (DisabledAccountException e) { - logger.error(e.getMessage()); - return new ResultData(ErrorCode.USER_IS_LOCKED); - } catch (Exception e) { - logger.error(e.getMessage()); - return new ResultData(ErrorCode.USER_PASSWD_ERR); - } - - if(isLogin) { - MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); - info.protectInfos(); - mallUserActionService.saveActionInfo(info, EnumMallUserAction.CONTROLLER.getCode(), ipaddress, info.getId(), "用户登录"); - - try { - String cookieName = URLEncoder.encode(info.getUsername(), "utf-8"); - Cookie unameCookie = new Cookie("uname", cookieName); - unameCookie.setPath("/"); - unameCookie.setMaxAge(3600); - response.addCookie(unameCookie); - return new ResultData(); - } catch (Exception e) { - logger.error(e.getMessage()); - return new ResultData(Result.ERROR, e.getMessage()); - } - } - return new ResultData(Result.ERROR,"登陆失败"); + return doLogin(user, response, EnumProject.PROJECT_2); } - - @ApiOperation("发送手机验证码") + + @ApiOperation("慧影发送手机验证码") @GetMapping("sendLoginPhoneCode") @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true)}) public ResultData sendLoginPhoneCode(String phone) { - logger.debug("[" + getIpAddr() + "] HomeController::sendlogincode"); - // 1. 检查手机号是否在用户列表里, 是否只有一个 - // 2. 发送手机验证码, 直接发 - List users = mallUserInfoService.getUserByPhone(phone); - if(users.size() <= 0) { - logger.error(ErrorCode.USER_IS_EMPTY.getMessage()); - return new ResultData(ErrorCode.USER_IS_EMPTY); - } - if(users.size() > 1) { - logger.error(ErrorCode.USER_IS_MULTI.getMessage()); - return new ResultData(ErrorCode.USER_IS_MULTI); - } - MallUserInfoVo user = users.get(0); - if (user==null) { - logger.error("用户不存在, userName: " + user.getUsername()); - return new ResultData(ErrorCode.USER_IS_EMPTY); - } - if(user.getStatus() == EnumMallUserStatus.NOT_VALID.getCode()){ - logger.error("用户已停用, userName: " + user.getUsername()); - return new ResultData(ErrorCode.USER_IS_LOCKED); - } - WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); - wxMsgValidationcode.setPhone(phone); - wxMsgValidationcode.updateTenantInfo(user); - wxMsgValidationcode.setType(EnumMsgModel.VALIDATION_CODE.getCode()); - return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode); + return doSendLoginPhoneCode(phone, EnumProject.PROJECT_2); } - @ApiOperation(value = "手机验证码登录", notes = "{\"phone\",\"string\",\"code\",\"string\"}") + @ApiOperation(value = "慧影手机验证码登录", notes = "{\"phone\",\"string\",\"code\",\"string\"}") @PostMapping("/doLoginByPhone") public ResultData doLoginByPhone(@RequestBody Map params, HttpServletResponse response) { - String ipaddress = getIpAddr(); - logger.debug("[" + ipaddress + "] HomeController::doLoginByPhone"); - // String phone,String code,String pwd - String phone = params.get("phone"); - String code = params.get("code"); - - if (StringUtils.isBlank(phone)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "userName不能为空"); - } - if (StringUtils.isBlank(code)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); - } - - // 获取用户信息列表 - List userList = mallUserInfoService.getUserByPhone(phone); - if(userList.size() == 1) { - MallUserInfoVo user = userList.get(0); - if (user == null) { - logger.error(ErrorCode.USER_IS_EMPTY.getMessage()); - return new ResultData(ErrorCode.USER_IS_EMPTY); - } - if (user.getStatus()==null ||!EnumMallUserStatus.VALID.getCode().equals(user.getStatus())) { - logger.error(ErrorCode.USER_IS_LOCKED.getMessage()); - return new ResultData(ErrorCode.USER_IS_LOCKED); - } - // check 验证码正确 - boolean isValidCode = false; - try { - isValidCode = wxMsgValidationcodeService.checkCodeValid(user.getPhone(),code); - } catch (Exception e) { - return new ResultData(Result.ERROR, e.getMessage()); - } - if(isValidCode) { - - // 验证码正确,直接登录 - try { - Subject subject = SecurityUtils.getSubject(); - UseriFormallToken token = new UseriFormallToken(user.getUsername()); - subject.login(token); - - MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); - info.protectInfos(); - mallUserActionService.saveActionInfo(info, EnumMallUserAction.CONTROLLER.getCode(), ipaddress, info.getId(), "用户手机号登录"); - - String cookieName = URLEncoder.encode(info.getUsername(), "utf-8"); - Cookie unameCookie = new Cookie("uname", cookieName); - unameCookie.setPath("/"); - unameCookie.setMaxAge(3600); - response.addCookie(unameCookie); - - return new ResultData(); - } catch (MallinkException e) { - return new ResultData(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - return new ResultData(ErrorCode.USER_PASSWD_ERR); - } - } else { - return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); - } - } else { - return new ResultData(ErrorCode.USER_IS_EMPTY); - } + return doLoginByPhone(params, response, EnumProject.PROJECT_2); } @ApiOperation("登出") diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sys/MallUserInfoController.java b/suimangAdmin/src/main/java/com/iformall/controller/sys/MallUserInfoController.java index 5c583c3..5c1f7ea 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sys/MallUserInfoController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sys/MallUserInfoController.java @@ -8,9 +8,11 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.constant.SwaggerConstant; import com.iformall.controller.base.BaseController; +import com.iformall.controller.sys.mallUserInfo.MallUserInfoBaseController; import com.iformall.domain.po.*; import com.iformall.domain.po.base.BaseEntity; import com.iformall.enums.EnumMallUserStatus; +import com.iformall.enums.EnumProject; import com.iformall.enums.EnumUserAdmin; import com.iformall.service.*; import com.iformall.shiro.PasswordHelper; @@ -37,18 +39,10 @@ import java.util.Map; @Api(value = "API - UserInfoController", description = "用户接口") @RestController @RequestMapping("user") -public class MallUserInfoController extends BaseController { +public class MallUserInfoController extends MallUserInfoBaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - MallUserInfoService userInfoService; - - @Autowired - MallUserRoleService userRoleService; - - @Autowired - MallRoleService mallRoleService; @Autowired MallUserRoleService mallUserRoleService; @@ -63,7 +57,7 @@ public class MallUserInfoController extends BaseController { WxMsgValidationcodeService wxMsgValidationcodeService; @ApiVersion(group = SwaggerConstant.V_1_0_0) - @ApiOperation(value = "用户分页接口", response = String.class) + @ApiOperation(value = "慧影-用户分页接口", response = String.class) @GetMapping("lists") //@RequiresPermissions("sys:user:list") @ApiImplicitParams({ @@ -71,30 +65,7 @@ public class MallUserInfoController extends BaseController { @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) @SystemControllerLog(description = "用户管理-列表") public ResultData listAsPage(MallUserInfo userInfo, Integer pageNum, Integer pageSize) { - logger.debug("[" + getIpAddr() + "] MallUserInfoController::listAsPage"); - - userInfo.updateTenantInfo(getTenantInfo()); - userInfo.setSortColumns(BaseEntity.SortField.CreateTime_DESC,BaseEntity.SortField.Id_DESC); - final PageInfo page = userInfoService.listAsPage(userInfo, pageNum, pageSize); - for (MallUserInfo u : page.getList()) { - MallUserRole r = new MallUserRole(); - r.setUid(u.getId()); - PageInfo ur = userRoleService.listAsPage(r, 1, 1); - if (ur.getSize() > 0) { - MallRole role = mallRoleService.getById(ur.getList().get(0).getRoleId()); - if (role != null) { - u.setRoleName(role.getName()); - u.setRoleId(role.getId()); - } - } - // 保密 - u.setPassword(null); - u.setBopenId(null); - if(StringUtils.isNotBlank(u.getWebOpenId())) { - u.setWebOpenId("保密"); - } - } - return new ResultData(page); + return listAsPage(userInfo, pageNum, pageSize, EnumProject.PROJECT_2); } @ApiOperation(value = "用户详情接口", response = String.class) @@ -109,125 +80,25 @@ public class MallUserInfoController extends BaseController { if(StringUtils.isNotBlank(user.getWebOpenId())) { user.setWebOpenId("保密"); } - return new ResultData(user); } @ApiVersion(group = SwaggerConstant.V_1_0_0) - @ApiOperation(value = "创建用户接口", response = String.class) + @ApiOperation(value = "慧影-创建用户接口", response = String.class) @PostMapping("add") //@RequiresPermissions("sys:user:add") @SystemControllerLog(description = "用户管理-创建用户") public ResultData createUser(@RequestBody MallUserInfo userInfo) { - logger.debug("[" + getIpAddr() + "] MallUserInfoController::createUser"); - MallUserInfo currentUser = getUser(); - if(currentUser.getIsAdmin().equals(EnumUserAdmin.Normal.getCode())) { - return new ResultData(ErrorCode.USER_NOT_ADMIN.getCode(), "只有系统管理员才能添加用户"); - } - - if(!getTenantInfo().getTenantId().equals(currentUser.getTenantId())){ - return new ResultData(ErrorCode.USER_NO_PERMISSION); - } - - if(checkUniqueName(userInfo.getUsername()) > 0){ - return new ResultData(ErrorCode.USER_NAME_IS_FOUND.getCode(),"用户名已存在"); - } - if(checkUniquePhone(userInfo.getPhone()) > 0){ - return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在"); - } - Assert.notNull(userInfo.getPassword(), "密码不能为空"); - PasswordHelper passwordHelper = new PasswordHelper(); - passwordHelper.encryptPassword(userInfo); - userInfo.updateTenantInfo(currentUser); - // 无法创建超管 - userInfo.setIsAdmin(EnumUserAdmin.Normal.getCode()); - userInfoService.saveOrUpdate(userInfo); - if (userInfo.getRoleId() != null) { - MallUserRole r = new MallUserRole(); - r.setRoleId(userInfo.getRoleId()); - r.setUid(userInfo.getId()); - userRoleService.saveOrUpdate(r); - } - return new ResultData(userInfo); + return doCreateUser(userInfo, EnumProject.PROJECT_2); } @ApiVersion(group = SwaggerConstant.V_1_0_0) - @ApiOperation(value = "修改用户接口", response = String.class) + @ApiOperation(value = "慧影-修改用户接口", response = String.class) @PostMapping("update") //@RequiresPermissions("sys:user:update") @SystemControllerLog(description = "用户管理-修改用户") public ResultData updateUser(@RequestBody MallUserInfo userInfo) { - logger.debug("[" + getIpAddr() + "] MallUserInfoController::updateUser"); - boolean bChangedPhone = false; - MallUserInfo currentUser = getUser(); - // 只有超管和自己能更新信息 - if (!(currentUser.getId().equals(userInfo.getId()) || - currentUser.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode()))) { - return new ResultData(ErrorCode.USER_NO_PERMISSION.getCode(), "系统管理员和自己才能修改信息"); - } - if(!getTenantInfo().getTenantId().equals(currentUser.getTenantId())){ - return new ResultData(ErrorCode.USER_NO_PERMISSION); - } - MallUserInfo oldUser = userInfoService.getById(userInfo.getId()); - if (!oldUser.getUsername().equals(userInfo.getUsername())) { - if(checkUniqueName(userInfo.getUsername()) > 0){ - return new ResultData(ErrorCode.USER_NAME_IS_FOUND.getCode(),"用户名已存在"); - } - } - if (!oldUser.getPhone().equals(userInfo.getPhone())) { - if(checkUniquePhone(userInfo.getPhone()) > 0){ - return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在"); - } - bChangedPhone = true; - } - - userInfo.updateTenantInfo(currentUser); - if (StringUtils.isNotBlank(userInfo.getPassword()) && userInfo.getPassword().length() > 0) { - PasswordHelper passwordHelper = new PasswordHelper(); - passwordHelper.encryptPassword(userInfo); - } - // 系统内人员不能设置系统管理员 - userInfo.setIsAdmin(null); - /* - if (!currentUser.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode())) { - // 只有系统管理员才能设置系统管理员 - userInfo.setIsAdmin(null); - } - */ - - if (currentUser.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode()) && - currentUser.getId().equals(userInfo.getId())) { - // 超管 - MallUserInfo adminUser = new MallUserInfo(); - adminUser.setEmail(userInfo.getEmail()); - adminUser.setId(userInfo.getId()); - if (StringUtils.isNotBlank(userInfo.getPassword()) && userInfo.getPassword().length() > 0) { - adminUser.setPassword(userInfo.getPassword()); - } - if (StringUtils.isNotBlank(userInfo.getNickName())) { - adminUser.setNickName(userInfo.getNickName()); - } - if (StringUtils.isNotBlank(userInfo.getPhone())) { - adminUser.setPhone(userInfo.getPhone()); - } - adminUser.setInvestRule(userInfo.getInvestRule()); - userInfoService.saveOrUpdate(adminUser); - } else { - userInfoService.saveOrUpdate(userInfo); - if (userInfo.getRoleId() != null) { - userRoleService.deleteByUserId(userInfo.getId()); - MallUserRole r = new MallUserRole(); - r.setRoleId(userInfo.getRoleId()); - r.setUid(userInfo.getId()); - userRoleService.saveOrUpdate(r); - } - } - if(bChangedPhone) { - // 手机号修改,清除bopen_id, 清除web_open_id - userInfoService.cleanAllOpenId(userInfo); - } - - return new ResultData(); + return doUpdateUser(userInfo,EnumProject.PROJECT_2); } @ApiVersion(group = SwaggerConstant.V_1_0_0) @@ -241,9 +112,9 @@ public class MallUserInfoController extends BaseController { if (currentUser.getIsAdmin().equals(EnumUserAdmin.Normal.getCode())) { return new ResultData(ErrorCode.USER_NOT_ADMIN.getCode(), "只有系统管理员才能删除用户"); } - if(!getTenantInfo().getTenantId().equals(currentUser.getTenantId())){ - return new ResultData(ErrorCode.USER_NO_PERMISSION); - } +// if(!getTenantInfo().getTenantId().equals(currentUser.getTenantId())){ +// return new ResultData(ErrorCode.USER_NO_PERMISSION); +// } if (currentUser.getId().equals(userInfo.getId())) { return new ResultData(ErrorCode.USER_NO_PERMISSION.getCode(), "用户不能删除自己"); } @@ -261,9 +132,9 @@ public class MallUserInfoController extends BaseController { MallUserInfo currentUser = getUser(); if (currentUser.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode())) { - if(!getTenantInfo().getTenantId().equals(currentUser.getTenantId())){ - return new ResultData(ErrorCode.USER_NO_PERMISSION); - } +// if(!getTenantInfo().getTenantId().equals(currentUser.getTenantId())){ +// return new ResultData(ErrorCode.USER_NO_PERMISSION); +// } MallUserInfo userInfo1 = userInfoService.getById(userInfo.getId()); if(userInfo1 == null) { @@ -281,14 +152,6 @@ public class MallUserInfoController extends BaseController { } } - private int checkUniqueName(String userName) { - return userInfoService.cntByUserName(userName); - } - - private int checkUniquePhone(String phone) { - return userInfoService.cntByUserPhone(phone); - } - @ApiOperation(value = "用户权限检查") @GetMapping("hasButtonPermission") @@ -327,79 +190,21 @@ public class MallUserInfoController extends BaseController { } @ApiVersion(group = SwaggerConstant.V_1_0_0) - @ApiOperation(value = "用户密码发送验证码") + @ApiOperation(value = "慧影-用户密码发送验证码") @GetMapping("sendvalidationcode") @ApiImplicitParams({ @ApiImplicitParam(name = "userName", value = "手机号", dataType = "String", paramType = "query", required = true), @ApiImplicitParam(name = "type", value = "场景(1:登录)", dataType = "Integer", paramType = "query", required = true)}) public ResultData sendvalidationcode(String userName, Integer type) { - logger.debug("[" + getIpAddr() + "] MallUserInfoController::sendvalidationcode"); - MallUserInfo userQ = new MallUserInfo(); - userQ.setUsername(userName); - - MallUserInfo user = userInfoService.getByUsername(userName); - if (user==null) { - logger.error("用户不存在, userName: " + userName); - return new ResultData(ErrorCode.USER_IS_EMPTY); - } - - if(user.getStatus() == EnumMallUserStatus.NOT_VALID.getCode()){ - logger.error("用户已停用, userName: " + userName); - return new ResultData(ErrorCode.USER_IS_LOCKED); - } - - if (StringUtils.isBlank(user.getPhone())) { - logger.error("用户手机号为空, userName: " + userName); - return new ResultData(ErrorCode.USER_PHONE_IS_NOT_FOUND); - } - - WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); - wxMsgValidationcode.updateTenantInfo(user); - wxMsgValidationcode.setPhone(user.getPhone()); - wxMsgValidationcode.setType(type); - return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode); + return doSendvalidationcode(userName,type,EnumProject.PROJECT_2); } @ApiVersion(group = SwaggerConstant.V_1_0_0) - @ApiOperation(value = "修改密码", notes = "{\"userName\",\"string\",\"code\",\"string\",\"pwd\",\"string\"}") + @ApiOperation(value = "慧影-修改密码", notes = "{\"userName\",\"string\",\"code\",\"string\",\"pwd\",\"string\"}") @PostMapping("/updatepwd") @SystemControllerLog(description = "用户管理-修改密码") public ResultData updatepwd(@RequestBody Map params) { - logger.debug("[" + getIpAddr() + "] MallUserInfoController::updatepwd"); - // String phone,String code,String pwd - String userName = params.get("userName"); - String code = params.get("code"); - String pwd = params.get("pwd"); - - if (StringUtils.isBlank(userName)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "userName不能为空"); - } - if (StringUtils.isBlank(code)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); - } - if (StringUtils.isBlank(pwd)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "密码不能为空"); - } - - MallUserInfo userQ = new MallUserInfo(); - userQ.setUsername(userName); - MallUserInfo user = userInfoService.getByUsername(userName); - if (user==null) { - logger.error("用户不存在, userName: " + userName); - return new ResultData(ErrorCode.USER_IS_EMPTY); - } - - user.setPassword(pwd); - - PasswordHelper passwordHelper = new PasswordHelper(); - passwordHelper.encryptPassword(user); - - - try { - return userInfoService.updatepwd(user, code); - } catch (Exception e) { - return new ResultData(Result.ERROR, e.getMessage()); - } + return doUpdatepwd(params, EnumProject.PROJECT_2); } diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sys/WechatLoginController.java b/suimangAdmin/src/main/java/com/iformall/controller/sys/WechatLoginController.java index 6fa048c..a8ac878 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sys/WechatLoginController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sys/WechatLoginController.java @@ -287,155 +287,155 @@ public class WechatLoginController extends BaseController { } } - @ApiOperation(value = "微信用户登录") - @GetMapping("weChatUserLogin") - @ApiImplicitParams({ - @ApiImplicitParam(name = "key", value = "key", dataType = "String", paramType = "query", required = true), - @ApiImplicitParam(name = "userName", value = "userName", dataType = "String", paramType = "query", required = true)}) - public ResultData weChatUserLogin(String key, String userName, HttpServletRequest request, HttpServletResponse response) { - String ipaddress = getIpAddr(); - log.debug("[" + ipaddress + "] MallUserInfoController::weChatUserLogin"); - String host = request.getHeader("host"); - log.debug("Host: " + host); - if(StringUtils.isBlank(userName)) { - log.error("请选择要登录的用户"); - return new ResultData(ErrorCode.WECHAT_LOGIN_USER_SELECT); - } - - String openKey = WECHAT_PREV + key; - // 限时时间内查找到此用户openId - if (openRedisTemplate.hasKey(openKey)){ - log.info(openKey + " - 找不到"); - String openId = openRedisTemplate.opsForValue().get(openKey); - openRedisTemplate.delete(openKey); - log.info("KEY: " + openKey + " deleted"); - - MallUserInfo userInfo = mallUserInfoService.getByUsername(userName); - if (userInfo == null) { - return new ResultData(ErrorCode.USER_IS_EMPTY); - } - if (userInfo.getStatus()==null ||!EnumMallUserStatus.VALID.getCode().equals(userInfo.getStatus())) { - return new ResultData(ErrorCode.USER_IS_LOCKED); - } - if(userInfo.getWebOpenId().equals(openId)) { - boolean isLogin = false; - try { - Subject subject = SecurityUtils.getSubject(); - UseriFormallToken token = new UseriFormallToken(userInfo.getUsername()); - subject.login(token); - MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); - info.protectInfos(); - String menus = mallUserRoleService.getPermissionsByUser(info); - if(StringUtils.isNotBlank(menus)) { - info.setMenus(menus); - } - Map ret = new HashMap<>(); - WxMall mall = mallService.getByTenantInfo(info); - if (mall == null) { - ret.put("code", Result.ERROR); - ret.put("message", "未配置相应的mall"); - log.info("用户登录失败-4,返回登录"); - try { - String errCode = URLEncoder.encode(JSON.toJSONString(ret), "utf-8"); - response.sendRedirect("https://" + host + "/#/login?errcode=" + errCode); - } catch (Exception e) { - log.error(e.getMessage()); - } - } - if (!mall.isValid()) { - ret.put("code", Result.ERROR); - ret.put("message", "mall已过期"); - log.info("用户登录失败-5,返回登录"); - try { - String errCode = URLEncoder.encode(JSON.toJSONString(ret), "utf-8"); - response.sendRedirect("https://" + host + "/#/login?errcode=" + errCode); - } catch (Exception e) { - log.error(e.getMessage()); - } - } - // 登录cookie - String cookieName = URLEncoder.encode(info.getUsername(), "utf-8"); - Cookie unameCookie = new Cookie("uname", cookieName); - unameCookie.setPath("/"); - unameCookie.setMaxAge(3600); - response.addCookie(unameCookie); - - MallUserAction action = new MallUserAction(); - action.updateTenantInfo(info); - action.setType(EnumMallUserAction.CONTROLLER.getCode()); - action.setIp(ipaddress); - action.setUserId(info.getId()); - action.setActionDesc("用户微信登录"); - action.setActionTime(new Date()); - mallUserActionService.saveOrUpdate(action); - - return new ResultData(); - } catch (UnknownAccountException e) { - log.error(e.getMessage()); - return new ResultData(ErrorCode.USER_IS_EMPTY.getCode(), e.getMessage()); - } catch (DisabledAccountException e) { - log.error(e.getMessage()); - return new ResultData(ErrorCode.USER_IS_LOCKED.getCode(), e.getMessage()); - } catch (Exception e) { - log.error(e.getMessage()); - return new ResultData(Result.ERROR, e.getMessage()); - } - } else { - // 登录失败 - log.error("微信登录失败,用户微信未绑定:" + openId); - return new ResultData(ErrorCode.WECHAT_LOGIN_NOT_BIND); - } - } - log.error("微信登录失败,KEY已过期: "+ key); - return new ResultData(ErrorCode.WECHAT_LOGIN_KEY_OVERTIME); - } - - @ApiOperation(value = "微信第三方登录绑定", notes = "请配置此callback到网页redirect_uri") - @GetMapping("bindWebOpenId") - @SystemControllerLog(description = "微信第三方登录绑定") - public void userBindWebOpenId(String code, String state, HttpServletRequest request, HttpServletResponse response) { - log.debug("[" + getIpAddr() + "] WechatLoginController::bindWebOpenId"); - String host = request.getHeader("host"); - String errCode = null; - try { - WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code); - log.debug("accessToken: " + accessToken.getAccessToken() + ", openId: " + accessToken.getOpenId() + ", unionId: " + accessToken.getUnionId()); - - // 获取 用户信息 - WxMpUser mpUser = wxMpService.oauth2getUserInfo(accessToken, null); - if(mpUser != null) { - log.debug(mpUser.toString()); - } - - String uname = state; - MallUserInfo user = mallUserInfoService.getByUsername(uname); - if(user != null) { - user.setWebOpenId(accessToken.getOpenId()); - mallUserInfoService.updateWebOpenId(user); - log.debug("https://" + host + "/#/layout"); - response.sendRedirect("https://" + host + "/#/layout"); - } else { - log.debug("https://" + host + "/#/layout?errcode=绑定失败"); - errCode = URLEncoder.encode("绑定失败", "utf-8"); - response.sendRedirect("https://" + host + "/#/layout?errcode="+errCode); - } - } catch (WxErrorException e) { - log.error(e.getMessage()); - errCode = e.getMessage(); - } catch (IOException e) { - log.error(e.getMessage()); - errCode = e.getMessage(); - } +// @ApiOperation(value = "微信用户登录") +// @GetMapping("weChatUserLogin") +// @ApiImplicitParams({ +// @ApiImplicitParam(name = "key", value = "key", dataType = "String", paramType = "query", required = true), +// @ApiImplicitParam(name = "userName", value = "userName", dataType = "String", paramType = "query", required = true)}) +// public ResultData weChatUserLogin(String key, String userName, HttpServletRequest request, HttpServletResponse response) { +// String ipaddress = getIpAddr(); +// log.debug("[" + ipaddress + "] MallUserInfoController::weChatUserLogin"); +// String host = request.getHeader("host"); +// log.debug("Host: " + host); +// if(StringUtils.isBlank(userName)) { +// log.error("请选择要登录的用户"); +// return new ResultData(ErrorCode.WECHAT_LOGIN_USER_SELECT); +// } +// +// String openKey = WECHAT_PREV + key; +// // 限时时间内查找到此用户openId +// if (openRedisTemplate.hasKey(openKey)){ +// log.info(openKey + " - 找不到"); +// String openId = openRedisTemplate.opsForValue().get(openKey); +// openRedisTemplate.delete(openKey); +// log.info("KEY: " + openKey + " deleted"); +// +// MallUserInfo userInfo = mallUserInfoService.getByUsername(userName); +// if (userInfo == null) { +// return new ResultData(ErrorCode.USER_IS_EMPTY); +// } +// if (userInfo.getStatus()==null ||!EnumMallUserStatus.VALID.getCode().equals(userInfo.getStatus())) { +// return new ResultData(ErrorCode.USER_IS_LOCKED); +// } +// if(userInfo.getWebOpenId().equals(openId)) { +// boolean isLogin = false; +// try { +// Subject subject = SecurityUtils.getSubject(); +// UseriFormallToken token = new UseriFormallToken(userInfo.getUsername()); +// subject.login(token); +// MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); +// info.protectInfos(); +// String menus = mallUserRoleService.getPermissionsByUser(info); +// if(StringUtils.isNotBlank(menus)) { +// info.setMenus(menus); +// } +// Map ret = new HashMap<>(); +// WxMall mall = mallService.getByTenantInfo(info); +// if (mall == null) { +// ret.put("code", Result.ERROR); +// ret.put("message", "未配置相应的mall"); +// log.info("用户登录失败-4,返回登录"); +// try { +// String errCode = URLEncoder.encode(JSON.toJSONString(ret), "utf-8"); +// response.sendRedirect("https://" + host + "/#/login?errcode=" + errCode); +// } catch (Exception e) { +// log.error(e.getMessage()); +// } +// } +// if (!mall.isValid()) { +// ret.put("code", Result.ERROR); +// ret.put("message", "mall已过期"); +// log.info("用户登录失败-5,返回登录"); +// try { +// String errCode = URLEncoder.encode(JSON.toJSONString(ret), "utf-8"); +// response.sendRedirect("https://" + host + "/#/login?errcode=" + errCode); +// } catch (Exception e) { +// log.error(e.getMessage()); +// } +// } +// // 登录cookie +// String cookieName = URLEncoder.encode(info.getUsername(), "utf-8"); +// Cookie unameCookie = new Cookie("uname", cookieName); +// unameCookie.setPath("/"); +// unameCookie.setMaxAge(3600); +// response.addCookie(unameCookie); +// +// MallUserAction action = new MallUserAction(); +// action.updateTenantInfo(info); +// action.setType(EnumMallUserAction.CONTROLLER.getCode()); +// action.setIp(ipaddress); +// action.setUserId(info.getId()); +// action.setActionDesc("用户微信登录"); +// action.setActionTime(new Date()); +// mallUserActionService.saveOrUpdate(action); +// +// return new ResultData(); +// } catch (UnknownAccountException e) { +// log.error(e.getMessage()); +// return new ResultData(ErrorCode.USER_IS_EMPTY.getCode(), e.getMessage()); +// } catch (DisabledAccountException e) { +// log.error(e.getMessage()); +// return new ResultData(ErrorCode.USER_IS_LOCKED.getCode(), e.getMessage()); +// } catch (Exception e) { +// log.error(e.getMessage()); +// return new ResultData(Result.ERROR, e.getMessage()); +// } +// } else { +// // 登录失败 +// log.error("微信登录失败,用户微信未绑定:" + openId); +// return new ResultData(ErrorCode.WECHAT_LOGIN_NOT_BIND); +// } +// } +// log.error("微信登录失败,KEY已过期: "+ key); +// return new ResultData(ErrorCode.WECHAT_LOGIN_KEY_OVERTIME); +// } - if(StringUtils.isNotBlank(errCode)) { - try { - errCode = URLEncoder.encode(errCode, "utf-8"); - response.sendRedirect("https://" + host + "/#/layout?errcode="+errCode); - } catch (Exception e) { - log.error(e.getMessage()); - } - } - } +// @ApiOperation(value = "微信第三方登录绑定", notes = "请配置此callback到网页redirect_uri") +// @GetMapping("bindWebOpenId") +// @SystemControllerLog(description = "微信第三方登录绑定") +// public void userBindWebOpenId(String code, String state, HttpServletRequest request, HttpServletResponse response) { +// log.debug("[" + getIpAddr() + "] WechatLoginController::bindWebOpenId"); +// String host = request.getHeader("host"); +// String errCode = null; +// try { +// WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(code); +// log.debug("accessToken: " + accessToken.getAccessToken() + ", openId: " + accessToken.getOpenId() + ", unionId: " + accessToken.getUnionId()); +// +// // 获取 用户信息 +// WxMpUser mpUser = wxMpService.oauth2getUserInfo(accessToken, null); +// if(mpUser != null) { +// log.debug(mpUser.toString()); +// } +// +// String uname = state; +// MallUserInfo user = mallUserInfoService.getByUsername(uname); +// if(user != null) { +// user.setWebOpenId(accessToken.getOpenId()); +// mallUserInfoService.updateWebOpenId(user); +// log.debug("https://" + host + "/#/layout"); +// response.sendRedirect("https://" + host + "/#/layout"); +// } else { +// log.debug("https://" + host + "/#/layout?errcode=绑定失败"); +// errCode = URLEncoder.encode("绑定失败", "utf-8"); +// response.sendRedirect("https://" + host + "/#/layout?errcode="+errCode); +// } +// } catch (WxErrorException e) { +// log.error(e.getMessage()); +// errCode = e.getMessage(); +// } catch (IOException e) { +// log.error(e.getMessage()); +// errCode = e.getMessage(); +// } +// +// if(StringUtils.isNotBlank(errCode)) { +// try { +// errCode = URLEncoder.encode(errCode, "utf-8"); +// response.sendRedirect("https://" + host + "/#/layout?errcode="+errCode); +// } catch (Exception e) { +// log.error(e.getMessage()); +// } +// } +// } @ApiOperation(value = "微信第三方登录解绑", notes = "请配置此callback到网页redirect_uri") @GetMapping("cleanWebOpenId") diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sys/mallUserInfo/MallUserInfoBaseController.java b/suimangAdmin/src/main/java/com/iformall/controller/sys/mallUserInfo/MallUserInfoBaseController.java new file mode 100644 index 0000000..2aa0711 --- /dev/null +++ b/suimangAdmin/src/main/java/com/iformall/controller/sys/mallUserInfo/MallUserInfoBaseController.java @@ -0,0 +1,471 @@ +package com.iformall.controller.sys.mallUserInfo; + +import com.github.pagehelper.PageInfo; +import com.google.code.kaptcha.Constants; +import com.google.code.kaptcha.Producer; +import com.iformall.annotation.ApiVersion; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.config.MyAuthenticationToken; +import com.iformall.constant.SwaggerConstant; +import com.iformall.controller.base.BaseController; +import com.iformall.domain.po.*; +import com.iformall.domain.po.base.BaseEntity; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.vo.MallUserInfoVo; +import com.iformall.enums.*; +import com.iformall.exception.MallinkException; +import com.iformall.annotation.SystemControllerLog; +import com.iformall.service.*; +import com.iformall.shiro.PasswordHelper; +import com.iformall.shiro.UserSession; +import com.iformall.shiro.UseriFormallToken; +import com.iformall.utils.Constant; +import com.iformall.utils.RedisCacheUtils; +import com.iformall.utils.ShiroUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.DisabledAccountException; +import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.session.Session; +import org.apache.shiro.subject.Subject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.util.Assert; +import org.springframework.web.bind.annotation.*; +import javax.imageio.ImageIO; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class MallUserInfoBaseController extends BaseController{ + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + public MallUserInfoService mallUserInfoService; + + @Autowired + public WxMsgValidationcodeService wxMsgValidationcodeService; + + @Autowired + public MallUserActionService mallUserActionService; + + @Autowired + public MallUserInfoService userInfoService; + + @Autowired + public MallUserRoleService userRoleService; + + @Autowired + public MallRoleService mallRoleService; + + + @Autowired + @Qualifier("objectCommonRedisTemplate") + public RedisTemplate redisTemplate; + + /** + * 登录 + * @param user + * @param response + * @param projectType + * @return + */ + public ResultData doLogin(MallUserInfo user, HttpServletResponse response,EnumProject projectType) { + String ipaddress = getIpAddr(); + try { + String kaptcha = ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY); + logger.info("登录接口-验证码:{}", user.getCaptcha()); + logger.info("登录接口-生成的验证码:{}", kaptcha); + if(!user.getCaptcha().equalsIgnoreCase(kaptcha)){ + return new ResultData(ErrorCode.KAPCHA_NOT_EQUAL); + } + } catch (MallinkException e) { + logger.error("验证码" + e.getMessage()); + return new ResultData(ErrorCode.KAPCHA_NOT_VALID.getCode(), e.getMessage()); + } +// String key = Constant.captchaPrev + ":" + getIpAddr(); +// String code = RedisCacheUtils.getCacheString(redisTemplate, key); +// if (StringUtils.isBlank(code)) { +// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码已过期"); +// } +// if (!code.equals(user.getCaptcha())) { +// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码不正确"); +// } + + + if (StringUtils.isBlank(user.getUsername()) || StringUtils.isBlank(user.getPassword())) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + // check user + MallUserInfo userCheck = mallUserInfoService.getByUsername(user.getUsername(),projectType.getCode()); + if(userCheck == null) { + logger.error(ErrorCode.USER_IS_EMPTY.getMessage()); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + if(userCheck.getStatus().equals(EnumMallUserStatus.NOT_VALID.getCode())) { + logger.error(ErrorCode.USER_IS_LOCKED.getMessage()); + return new ResultData(ErrorCode.USER_IS_LOCKED); + } + boolean isLogin = false; + try { + Subject subject = SecurityUtils.getSubject(); + //UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword()); + //subject.login(token); + MyAuthenticationToken mytoken = new MyAuthenticationToken(projectType.getCode(),user.getUsername(),user.getPassword().toCharArray()); + subject.login(mytoken); + isLogin = true; + logger.info("ADMIN USER:"+user.getUsername() + ", password:" + user.getPassword()); + } catch (UnknownAccountException e) { + logger.error(e.getMessage()); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } catch (DisabledAccountException e) { + logger.error(e.getMessage()); + return new ResultData(ErrorCode.USER_IS_LOCKED); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(ErrorCode.USER_PASSWD_ERR); + } + + if(isLogin) { + MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); + info.protectInfos(); + mallUserActionService.saveActionInfo(info, EnumMallUserAction.CONTROLLER.getCode(), ipaddress, info.getId(), "用户登录"); + + try { + String cookieName = URLEncoder.encode(info.getUsername(), "utf-8"); + Cookie unameCookie = new Cookie("uname", cookieName); + unameCookie.setPath("/"); + unameCookie.setMaxAge(3600); + response.addCookie(unameCookie); + return new ResultData(); + } catch (Exception e) { + logger.error(e.getMessage()); + return new ResultData(Result.ERROR, e.getMessage()); + } + } + return new ResultData(Result.ERROR,"登陆失败"); + } + + //登录发送手机验证码 + public ResultData doSendLoginPhoneCode(String phone,EnumProject projectType) { + List users = mallUserInfoService.getUserByPhone(phone,projectType.getCode()); + if(users.size() <= 0) { + logger.error(ErrorCode.USER_IS_EMPTY.getMessage()); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + if(users.size() > 1) { + logger.error(ErrorCode.USER_IS_MULTI.getMessage()); + return new ResultData(ErrorCode.USER_IS_MULTI); + } + MallUserInfoVo user = users.get(0); + if (user==null) { + logger.error("用户不存在, userName: " + user.getUsername()); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + if(user.getStatus() == EnumMallUserStatus.NOT_VALID.getCode()){ + logger.error("用户已停用, userName: " + user.getUsername()); + return new ResultData(ErrorCode.USER_IS_LOCKED); + } + WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); + wxMsgValidationcode.setPhone(phone); + wxMsgValidationcode.updateTenantInfo(user); + wxMsgValidationcode.setType(EnumMsgModel.VALIDATION_CODE.getCode()); + return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode,projectType.getCode()); + } + + //手机验证码登录 + public ResultData doLoginByPhone(Map params, HttpServletResponse response,EnumProject projectType) { + String ipaddress = getIpAddr(); + logger.debug("[" + ipaddress + "] HomeController::doLoginByPhone"); + // String phone,String code,String pwd + String phone = params.get("phone"); + String code = params.get("code"); + + if (StringUtils.isBlank(phone)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "userName不能为空"); + } + if (StringUtils.isBlank(code)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); + } + + // 获取用户信息列表 + List userList = mallUserInfoService.getUserByPhone(phone,projectType.getCode()); + if(userList.size() == 1) { + MallUserInfoVo user = userList.get(0); + if (user == null) { + logger.error(ErrorCode.USER_IS_EMPTY.getMessage()); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + if (user.getStatus()==null ||!EnumMallUserStatus.VALID.getCode().equals(user.getStatus())) { + logger.error(ErrorCode.USER_IS_LOCKED.getMessage()); + return new ResultData(ErrorCode.USER_IS_LOCKED); + } + // check 验证码正确 + boolean isValidCode = false; + try { + isValidCode = wxMsgValidationcodeService.checkCodeValid(user.getPhone(),code,projectType.getCode()); + } catch (Exception e) { + return new ResultData(Result.ERROR, e.getMessage()); + } + if(isValidCode) { + + // 验证码正确,直接登录 + try { + Subject subject = SecurityUtils.getSubject(); + UseriFormallToken token = new UseriFormallToken(user.getUsername()); + subject.login(token); + + MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); + info.protectInfos(); + mallUserActionService.saveActionInfo(info, EnumMallUserAction.CONTROLLER.getCode(), ipaddress, info.getId(), "用户手机号登录"); + + String cookieName = URLEncoder.encode(info.getUsername(), "utf-8"); + Cookie unameCookie = new Cookie("uname", cookieName); + unameCookie.setPath("/"); + unameCookie.setMaxAge(3600); + response.addCookie(unameCookie); + + return new ResultData(); + } catch (MallinkException e) { + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + return new ResultData(ErrorCode.USER_PASSWD_ERR); + } + } else { + return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); + } + } else { + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + } + + //分页查询用户 + public ResultData listAsPage(MallUserInfo userInfo, Integer pageNum, Integer pageSize,EnumProject projectType) { + userInfo.updateTenantInfo(getTenantInfo()); + userInfo.setSortColumns(BaseEntity.SortField.CreateTime_DESC,BaseEntity.SortField.Id_DESC); + userInfo.setProjectType(projectType.getCode()); + final PageInfo page = userInfoService.listAsPage(userInfo, pageNum, pageSize); + for (MallUserInfo u : page.getList()) { + MallUserRole r = new MallUserRole(); + r.setUid(u.getId()); + PageInfo ur = userRoleService.listAsPage(r, 1, 1); + if (ur.getSize() > 0) { + MallRole role = mallRoleService.getById(ur.getList().get(0).getRoleId()); + if (role != null) { + u.setRoleName(role.getName()); + u.setRoleId(role.getId()); + } + } + // 保密 + u.setPassword(null); + u.setBopenId(null); + if(StringUtils.isNotBlank(u.getWebOpenId())) { + u.setWebOpenId("保密"); + } + } + return new ResultData(page); + } + + //新增用户 + public ResultData doCreateUser(MallUserInfo userInfo,EnumProject projectType) { + MallUserInfo currentUser = getUser(); + if(currentUser.getIsAdmin().equals(EnumUserAdmin.Normal.getCode())) { + return new ResultData(ErrorCode.USER_NOT_ADMIN.getCode(), "只有系统管理员才能添加用户"); + } + + if(!getTenantInfo().getTenantId().equals(currentUser.getTenantId())){ + return new ResultData(ErrorCode.USER_NO_PERMISSION); + } + + if(checkUniqueName(userInfo.getUsername(),projectType) > 0){ + return new ResultData(ErrorCode.USER_NAME_IS_FOUND.getCode(),"用户名已存在"); + } + if(checkUniquePhone(userInfo.getPhone(),projectType) > 0){ + return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在"); + } + Assert.notNull(userInfo.getPassword(), "密码不能为空"); + PasswordHelper passwordHelper = new PasswordHelper(); + passwordHelper.encryptPassword(userInfo); + userInfo.updateTenantInfo(currentUser); + // 无法创建超管 + userInfo.setIsAdmin(EnumUserAdmin.Normal.getCode()); + userInfo.setProjectType(projectType.getCode()); + userInfoService.saveOrUpdate(userInfo); + if (userInfo.getRoleId() != null) { + MallUserRole r = new MallUserRole(); + r.setRoleId(userInfo.getRoleId()); + r.setUid(userInfo.getId()); + userRoleService.saveOrUpdate(r); + } + return new ResultData(userInfo); + } + + //修改用户 + public ResultData doUpdateUser(MallUserInfo userInfo,EnumProject projectType) { + boolean bChangedPhone = false; + MallUserInfo currentUser = getUser(); + // 只有超管和自己能更新信息 + if (!(currentUser.getId().equals(userInfo.getId()) || + currentUser.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode()))) { + return new ResultData(ErrorCode.USER_NO_PERMISSION.getCode(), "系统管理员和自己才能修改信息"); + } +// if(!getTenantInfo().getTenantId().equals(currentUser.getTenantId())){ +// return new ResultData(ErrorCode.USER_NO_PERMISSION); +// } + MallUserInfo oldUser = userInfoService.getById(userInfo.getId()); + if (!oldUser.getUsername().equals(userInfo.getUsername())) { + if(checkUniqueName(userInfo.getUsername(),projectType) > 0){ + return new ResultData(ErrorCode.USER_NAME_IS_FOUND.getCode(),"用户名已存在"); + } + } + if (!oldUser.getPhone().equals(userInfo.getPhone())) { + if(checkUniquePhone(userInfo.getPhone(),projectType) > 0){ + return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在"); + } + bChangedPhone = true; + } + + userInfo.updateTenantInfo(currentUser); + if (StringUtils.isNotBlank(userInfo.getPassword()) && userInfo.getPassword().length() > 0) { + PasswordHelper passwordHelper = new PasswordHelper(); + passwordHelper.encryptPassword(userInfo); + } + // 系统内人员不能设置系统管理员 + userInfo.setIsAdmin(EnumUserAdmin.Normal.getCode()); + /* + if (!currentUser.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode())) { + // 只有系统管理员才能设置系统管理员 + userInfo.setIsAdmin(null); + } + */ + + if (currentUser.getIsAdmin().equals(EnumUserAdmin.ADMIN.getCode()) && + currentUser.getId().equals(userInfo.getId())) { + // 超管 + MallUserInfo adminUser = new MallUserInfo(); + adminUser.setEmail(userInfo.getEmail()); + adminUser.setId(userInfo.getId()); + if (StringUtils.isNotBlank(userInfo.getPassword()) && userInfo.getPassword().length() > 0) { + adminUser.setPassword(userInfo.getPassword()); + } + if (StringUtils.isNotBlank(userInfo.getNickName())) { + adminUser.setNickName(userInfo.getNickName()); + } + if (StringUtils.isNotBlank(userInfo.getPhone())) { + adminUser.setPhone(userInfo.getPhone()); + } + adminUser.setInvestRule(userInfo.getInvestRule()); + userInfoService.saveOrUpdate(adminUser); + } else { + userInfoService.saveOrUpdate(userInfo); + if (userInfo.getRoleId() != null) { + userRoleService.deleteByUserId(userInfo.getId()); + MallUserRole r = new MallUserRole(); + r.setRoleId(userInfo.getRoleId()); + r.setUid(userInfo.getId()); + userRoleService.saveOrUpdate(r); + } + } + if(bChangedPhone) { + // 手机号修改,清除bopen_id, 清除web_open_id + userInfoService.cleanAllOpenId(userInfo); + } + + return new ResultData(); + } + + public int checkUniqueName(String userName,EnumProject projectType) { + return userInfoService.cntByUserName(userName,projectType.getCode()); + } + + public int checkUniquePhone(String phone,EnumProject projectType) { + return userInfoService.cntByUserPhone(phone,projectType.getCode()); + } + + //向用户发送验证码 + public ResultData doSendvalidationcode(String userName, Integer type,EnumProject projectType) { + MallUserInfo userQ = new MallUserInfo(); + userQ.setUsername(userName); + + MallUserInfo user = userInfoService.getByUsername(userName,projectType.getCode()); + if (user==null) { + logger.error("用户不存在, userName: " + userName); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + + if(user.getStatus() == EnumMallUserStatus.NOT_VALID.getCode()){ + logger.error("用户已停用, userName: " + userName); + return new ResultData(ErrorCode.USER_IS_LOCKED); + } + + if (StringUtils.isBlank(user.getPhone())) { + logger.error("用户手机号为空, userName: " + userName); + return new ResultData(ErrorCode.USER_PHONE_IS_NOT_FOUND); + } + + WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); + wxMsgValidationcode.updateTenantInfo(user); + wxMsgValidationcode.setPhone(user.getPhone()); + wxMsgValidationcode.setType(type); + return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode,projectType.getCode()); + } + + //更改用户密码 + public ResultData doUpdatepwd(Map params,EnumProject projectType) { + // String phone,String code,String pwd + String userName = params.get("userName"); + String code = params.get("code"); + String pwd = params.get("pwd"); + + if (StringUtils.isBlank(userName)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "userName不能为空"); + } + if (StringUtils.isBlank(code)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); + } + if (StringUtils.isBlank(pwd)) { + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "密码不能为空"); + } + + MallUserInfo userQ = new MallUserInfo(); + userQ.setUsername(userName); + MallUserInfo user = userInfoService.getByUsername(userName,projectType.getCode()); + if (user==null) { + logger.error("用户不存在, userName: " + userName); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + + user.setPassword(pwd); + + PasswordHelper passwordHelper = new PasswordHelper(); + passwordHelper.encryptPassword(user); + + + try { + return userInfoService.updatepwd(user, code); + } catch (Exception e) { + return new ResultData(Result.ERROR, e.getMessage()); + } + } + +} \ No newline at end of file diff --git a/suimangAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java b/suimangAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java index 3d98dc0..cb0e8c6 100644 --- a/suimangAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java +++ b/suimangAdmin/src/main/java/com/iformall/shiro/MyShiroRealm.java @@ -3,6 +3,7 @@ package com.iformall.shiro; import javax.annotation.Resource; import com.iformall.common.ErrorCode; +import com.iformall.config.MyAuthenticationToken; import com.iformall.enums.EnumMallUserStatus; import com.iformall.service.MallUserInfoService; import org.apache.commons.lang3.StringUtils; @@ -27,7 +28,13 @@ public class MyShiroRealm extends AuthorizingRealm { @Resource private MallUserInfoService userService; - //授权 + //识别自定义token + @Override + public boolean supports(AuthenticationToken token) { + return token != null && token instanceof MyAuthenticationToken; + } + + //授权 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { MallUserInfo user= (MallUserInfo) SecurityUtils.getSubject().getPrincipal(); @@ -40,9 +47,10 @@ public class MyShiroRealm extends AuthorizingRealm { //认证 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { + MyAuthenticationToken mytoken = (MyAuthenticationToken) token; //获取用户的输入的账号. - String username = (String)token.getPrincipal(); - MallUserInfo user = userService.getByUsername(username); + //String username = (String)token.getPrincipal(); + MallUserInfo user = userService.getByUsername(mytoken.getUsername(),mytoken.getProjectType()); if(user == null) { throw new UnknownAccountException(ErrorCode.USER_IS_EMPTY.getMessage()); } @@ -54,7 +62,7 @@ public class MyShiroRealm extends AuthorizingRealm { SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo( user, //用户 user.getPassword(), //密码 - ByteSource.Util.bytes(username), + ByteSource.Util.bytes(mytoken.getUsername()), getName() //realm name ); // 当验证都通过后,把用户信息放在session里 diff --git a/suimangAdmin/src/main/resources/db/migration/V2023110300001_personmould.sql b/suimangAdmin/src/main/resources/db/migration/V2023110300001_personmould.sql index 28c7232..b20fd4b 100644 --- a/suimangAdmin/src/main/resources/db/migration/V2023110300001_personmould.sql +++ b/suimangAdmin/src/main/resources/db/migration/V2023110300001_personmould.sql @@ -18,5 +18,16 @@ ALTER TABLE `user_mould_video` ADD COLUMN cost_points_detail varchar(500) COMMENT '消耗金币明细' ; +ALTER TABLE `service_info` +ADD COLUMN mall_user_info int(11) COMMENT '登录用户编号' ; + + +ALTER TABLE `mall_user_info` +ADD COLUMN project_type int(1) NOT NULL COMMENT '所属项目EnumProject' ; + + +ALTER TABLE wx_msg_validationcode +ADD COLUMN project_type int(1) NOT NULL COMMENT '所属项目EnumProject' ; + diff --git a/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java b/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java index 3625ab1..deccb1d 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java @@ -280,7 +280,7 @@ public class MiniAppUserController extends BaseController { // check 验证码正确 boolean isValidCode = false; try { - isValidCode = wxMsgValidationcodeService.checkCodeValid(phone, code); + isValidCode = wxMsgValidationcodeService.checkCodeValid(phone, code,0); } catch (Exception e) { return new ResultData(Result.ERROR, e.getMessage()); } diff --git a/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index 3b4624e..3935883 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -298,7 +298,7 @@ public class WxUserGrantController extends BaseController { // check 验证码正确 boolean isValidCode = false; try { - isValidCode = wxMsgValidationcodeService.checkCodeValid(phone, code); + isValidCode = wxMsgValidationcodeService.checkCodeValid(phone, code,0); } catch (Exception e) { return new ResultData(Result.ERROR, e.getMessage()); } @@ -345,7 +345,7 @@ public class WxUserGrantController extends BaseController { WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); wxMsgValidationcode.setPhone(phone); wxMsgValidationcode.setType(EnumMsgModel.VALIDATION_CODE.getCode()); - return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode); + return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode,0); } @@ -395,7 +395,7 @@ public class WxUserGrantController extends BaseController { WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); wxMsgValidationcode.setPhone(phone); wxMsgValidationcode.setType(EnumMsgModel.VALIDATION_CODE.getCode()); - return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode); + return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode,0); } @@ -592,7 +592,7 @@ public class WxUserGrantController extends BaseController { // check 验证码正确 boolean isValidCode = false; try { - isValidCode = wxMsgValidationcodeService.checkCodeValid(phone, code); + isValidCode = wxMsgValidationcodeService.checkCodeValid(phone, code,0); } catch (Exception e) { return new ResultData(Result.ERROR, e.getMessage()); } diff --git a/suimangCallback/src/main/java/com/iformall/shiro/MyRetryLimitCredentialsMatcher.java b/suimangCallback/src/main/java/com/iformall/shiro/MyRetryLimitCredentialsMatcher.java index e71e52c..a6d8d70 100644 --- a/suimangCallback/src/main/java/com/iformall/shiro/MyRetryLimitCredentialsMatcher.java +++ b/suimangCallback/src/main/java/com/iformall/shiro/MyRetryLimitCredentialsMatcher.java @@ -26,7 +26,7 @@ public class MyRetryLimitCredentialsMatcher extends HashedCredentialsMatcher { if(tk.getType().equals(EnumLoginType.NOPASSWD)){ // 获取用户的输入的账号. String username = (String)tk.getPrincipal(); - MallUserInfo user = userService.getByUsername(username); + MallUserInfo user = userService.getByUsername(username,tk.getProjectType()); if(user == null) { throw new UnknownAccountException(ErrorCode.USER_IS_EMPTY.getMessage()); } diff --git a/suimangCallback/src/main/java/com/iformall/shiro/MyShiroRealm.java b/suimangCallback/src/main/java/com/iformall/shiro/MyShiroRealm.java index 520d5db..0c7fcf2 100644 --- a/suimangCallback/src/main/java/com/iformall/shiro/MyShiroRealm.java +++ b/suimangCallback/src/main/java/com/iformall/shiro/MyShiroRealm.java @@ -39,7 +39,7 @@ public class MyShiroRealm extends AuthorizingRealm { protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { //获取用户的输入的账号. String username = (String)token.getPrincipal(); - MallUserInfo user = userService.getByUsername(username); + MallUserInfo user = userService.getByUsername(username,0); if(user == null) { throw new UnknownAccountException(ErrorCode.USER_IS_EMPTY.getMessage()); } diff --git a/suimangCallback/src/main/java/com/iformall/shiro/UseriFormallToken.java b/suimangCallback/src/main/java/com/iformall/shiro/UseriFormallToken.java index 04f525a..1513fdf 100644 --- a/suimangCallback/src/main/java/com/iformall/shiro/UseriFormallToken.java +++ b/suimangCallback/src/main/java/com/iformall/shiro/UseriFormallToken.java @@ -7,14 +7,16 @@ public class UseriFormallToken extends UsernamePasswordToken { private static final long serialVersionUID = -2564928913725078138L; private EnumLoginType type; + private int projectType; public UseriFormallToken() { super(); } - public UseriFormallToken(String username, String password, EnumLoginType type, boolean rememberMe, String host) { + public UseriFormallToken(String username, String password, EnumLoginType type, boolean rememberMe, String host,int projectType) { super(username, password, rememberMe, host); this.type = type; + this.projectType = projectType; } /** 免密登录 */ @@ -36,4 +38,13 @@ public class UseriFormallToken extends UsernamePasswordToken { public void setType(EnumLoginType type) { this.type = type; } + + public int getProjectType() { + return projectType; + } + + public void setProjectType(int projectType) { + this.projectType = projectType; + } + } diff --git a/suimangService/src/main/java/com/iformall/domain/po/MallUserInfo.java b/suimangService/src/main/java/com/iformall/domain/po/MallUserInfo.java index 3f46e2d..9322699 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/MallUserInfo.java +++ b/suimangService/src/main/java/com/iformall/domain/po/MallUserInfo.java @@ -78,6 +78,9 @@ public class MallUserInfo extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value = "邮箱", name = "email") private String email; + + @io.swagger.annotations.ApiModelProperty(value = "所属项目EnumProject", name = "projectType") + private Integer projectType; public Integer getWithWechatNotFormat() { return this.withWechat; diff --git a/suimangService/src/main/java/com/iformall/domain/po/WxMsgValidationcode.java b/suimangService/src/main/java/com/iformall/domain/po/WxMsgValidationcode.java index 8f7c1e7..3626803 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/WxMsgValidationcode.java +++ b/suimangService/src/main/java/com/iformall/domain/po/WxMsgValidationcode.java @@ -30,6 +30,8 @@ public class WxMsgValidationcode extends TenantEntity { private String signature; @io.swagger.annotations.ApiModelProperty(value="",name="code") private String code; + @io.swagger.annotations.ApiModelProperty(value="所属项目EnumProject",name="projectType") + private Integer projectType; @TableField(exist = false) private String createtimeStr; diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/ServiceInfo.java b/suimangService/src/main/java/com/iformall/domain/po/sm/ServiceInfo.java index 7cabe76..2c2a636 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/sm/ServiceInfo.java +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/ServiceInfo.java @@ -66,4 +66,10 @@ public class ServiceInfo extends BaseEntity{ */ @TableField("del_flag") private Integer delFlag; + + /** + * 登录用户 + */ + @TableField("mall_user_info") + private Long mallUserInfo; } diff --git a/suimangService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java b/suimangService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java index e616bcd..57c8e8b 100644 --- a/suimangService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java +++ b/suimangService/src/main/java/com/iformall/mapper/MallUserInfoMapper.java @@ -15,7 +15,7 @@ public interface MallUserInfoMapper extends CommonMapper { List findList(MallUserInfo mallUserInfo); - MallUserInfo selectByUserName(@Param("username") String username); + MallUserInfo selectByUserName(@Param("username") String username,@Param("projectType") Integer projectType); MallUserInfo selectByUserNameWebOpen(@Param("username") String username, @Param("webOpenId") String webOpenId); @@ -34,7 +34,7 @@ public interface MallUserInfoMapper extends CommonMapper { int cntByUserName(Map params); - List selectUsersByPhone(@Param("phone") String phone); + List selectUsersByPhone(@Param("phone") String phone,@Param("projectType") Integer projectType); List selectUsersByWebOpenId(@Param("webOpenId") String webOpenId); diff --git a/suimangService/src/main/java/com/iformall/service/MallUserInfoService.java b/suimangService/src/main/java/com/iformall/service/MallUserInfoService.java index ede0135..72273d6 100644 --- a/suimangService/src/main/java/com/iformall/service/MallUserInfoService.java +++ b/suimangService/src/main/java/com/iformall/service/MallUserInfoService.java @@ -31,7 +31,7 @@ public interface MallUserInfoService { * @param username * @return */ - MallUserInfo getByUsername(String username); + MallUserInfo getByUsername(String username,int projectType); /** @@ -121,14 +121,14 @@ public interface MallUserInfoService { * * @param username */ - int cntByUserName(String username); + int cntByUserName(String username,int projectType); /** * 查询手机号,用于校验手机号是否重复 * * @param phone */ - int cntByUserPhone(String phone); + int cntByUserPhone(String phone,int projectType); @@ -164,7 +164,7 @@ public interface MallUserInfoService { * @param phone * @return */ - List getUserByPhone(String phone); + List getUserByPhone(String phone,int projectType); void updateBOpenId(MallUserInfo user); diff --git a/suimangService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java b/suimangService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java index a59788f..9188cec 100644 --- a/suimangService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java +++ b/suimangService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java @@ -37,9 +37,9 @@ public interface WxMsgValidationcodeService { void deleteById(Long id); - ResultData sendvalidationcode(WxMsgValidationcode record); + ResultData sendvalidationcode(WxMsgValidationcode record,int projectType); - boolean checkCodeValid(String phone, String code); + boolean checkCodeValid(String phone, String code,int projectType); ResultData hasvalidationcode(WxMsgValidationcode record); diff --git a/suimangService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java index 9d4aad3..dcc671a 100644 --- a/suimangService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java @@ -106,8 +106,8 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { } @Override - public List getUserByPhone(String phone) { - return mallUserInfoMapper.selectUsersByPhone(phone); + public List getUserByPhone(String phone,int projectType) { + return mallUserInfoMapper.selectUsersByPhone(phone,projectType); } @Override @@ -209,21 +209,23 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { } @Override - public MallUserInfo getByUsername(String username) { - return mallUserInfoMapper.selectByUserName(username); + public MallUserInfo getByUsername(String username,int projectType) { + return mallUserInfoMapper.selectByUserName(username,projectType); } @Override - public int cntByUserName(String username) { + public int cntByUserName(String username,int projectType) { Map params = new HashMap<>(); params.put("username", username); + params.put("projectType", projectType); return mallUserInfoMapper.cntByUserName(params); } @Override - public int cntByUserPhone(String phone) { + public int cntByUserPhone(String phone,int projectType) { Map params = new HashMap<>(); params.put("phone", phone); + params.put("projectType", projectType); return mallUserInfoMapper.cntByUserName(params); } diff --git a/suimangService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java index f9500b1..5acbdb1 100644 --- a/suimangService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/impl/WxMallServiceImpl.java @@ -326,10 +326,10 @@ public class WxMallServiceImpl implements WxMallService { userInfo.setPassword(wxMall.getAdminPassword()); if(userInfo.getId() == null){ - if(userInfoService.cntByUserName(userInfo.getUsername()) > 0){ + if(userInfoService.cntByUserName(userInfo.getUsername(),0) > 0){ return new ResultData(ErrorCode.USER_NAME_IS_FOUND.getCode(),"用户名已存在"); } - if(userInfoService.cntByUserPhone(userInfo.getPhone()) > 0){ + if(userInfoService.cntByUserPhone(userInfo.getPhone(),0) > 0){ return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在"); } if(StringUtils.isBlank(userInfo.getPassword())){ @@ -356,7 +356,7 @@ public class WxMallServiceImpl implements WxMallService { // } // } if (!oldUser.getPhone().equals(userInfo.getPhone())) { - if(userInfoService.cntByUserPhone(userInfo.getPhone()) > 0){ + if(userInfoService.cntByUserPhone(userInfo.getPhone(),0) > 0){ return new ResultData(ErrorCode.USER_PHONE_IS_FOUND.getCode(),"手机号已存在"); } bChangedPhone = true; diff --git a/suimangService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java index 20b1a27..09648dd 100644 --- a/suimangService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java @@ -97,9 +97,9 @@ public class WxMsgValidationcodeServiceImpl implements WxMsgValidationcodeServic @Override - public ResultData sendvalidationcode(WxMsgValidationcode wxMsgValidationcode) { + public ResultData sendvalidationcode(WxMsgValidationcode wxMsgValidationcode,int projectType) { //1、查看是否存在未过期的短信,有返回成功 没有继续 - String key = Constant.codePrev + ":" + wxMsgValidationcode.getPhone(); + String key = Constant.codePrev + ":"+projectType+":" + wxMsgValidationcode.getPhone(); Long expire = RedisCacheUtils.getExpire(redisTemplate, key); if(expire != null && expire > 60*4l){ return new ResultData(ErrorCode.MSG_REPEAT_SEND); @@ -108,6 +108,7 @@ public class WxMsgValidationcodeServiceImpl implements WxMsgValidationcodeServic //2 判断是否已超过10条 String systemTime = DateUtils.getSystemTime("yyyy-MM-dd"); wxMsgValidationcode.setCreatetimeStr(systemTime); + wxMsgValidationcode.setProjectType(projectType); Integer count = wxMsgValidationcodeMapper.findListCount(wxMsgValidationcode); if (count != null && count.intValue() > 20) { return new ResultData(ErrorCode.MSG_SEND_ERROR.getCode(), "验证码发送超限"); @@ -129,8 +130,8 @@ public class WxMsgValidationcodeServiceImpl implements WxMsgValidationcodeServic } @Override - public boolean checkCodeValid(String phone, String code) { - String key = Constant.codePrev + ":" + phone; + public boolean checkCodeValid(String phone, String code,int projectType) { + String key = Constant.codePrev + ":"+ projectType +":" + phone; String cacheCode = RedisCacheUtils.getCacheString(redisTemplate, key); if(cacheCode == null || !cacheCode.equals(code)){ return false; diff --git a/suimangService/src/main/resources/mapper/MallUserInfoMapper.xml b/suimangService/src/main/resources/mapper/MallUserInfoMapper.xml index 75fd3bb..267ba7b 100644 --- a/suimangService/src/main/resources/mapper/MallUserInfoMapper.xml +++ b/suimangService/src/main/resources/mapper/MallUserInfoMapper.xml @@ -18,14 +18,15 @@ + - `id`,`tenant_id`,`parent_tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`invest_rule`,`nick_name`,`phone`,`web_open_id`,email + `id`,`tenant_id`,`parent_tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`invest_rule`,`nick_name`,`phone`,`web_open_id`,email,`project_type` - `id`,`tenant_id`,`parent_tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`invest_rule`,`nick_name`,`phone`, + `id`,`tenant_id`,`parent_tenant_id`,`username`,`name`,`password`,`create_time`,`last_login_time`,`status`,`is_admin`,`invest_rule`,`nick_name`,`phone`,`project_type` `bopen_id`,`web_open_id`,email @@ -89,6 +90,9 @@ and `email` = #{email} + + and `project_type` = #{projectType} + and `web_open_id` is not null @@ -122,6 +126,9 @@ and username=#{username} + + and project_type=#{projectType} + @@ -284,6 +294,7 @@ + @@ -293,13 +304,13 @@ u.`id`,u.`tenant_id`,u.`parent_tenant_id`,u.`username`,u.`name`,u.`password`,u.`create_time`,u.`last_login_time`,u.`status`,u.`is_admin`,u.`invest_rule`,u.`nick_name`,u.`phone`, - m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h`,email + m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h`,u.email,u.`project_type` u.`id`,u.`tenant_id`,u.`parent_tenant_id`,u.`username`,u.`name`,u.`password`,u.`create_time`,u.`last_login_time`,u.`status`,u.`is_admin`,u.`invest_rule`,u.`nick_name`,u.`phone`, u.`bopen_id`,u.`web_open_id`, - m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h`,email + m.`name` as mall_name, m.`group` as mall_group, m.`img_url`, m.`img_url_h`,u.email,u.`project_type` @@ -312,6 +323,9 @@ and u.`phone` = #{phone} + + and u.project_type=#{projectType} + diff --git a/suimangService/src/main/resources/mapper/WxMsgValidationcodeMapper.xml b/suimangService/src/main/resources/mapper/WxMsgValidationcodeMapper.xml index 7d83260..3961c4d 100644 --- a/suimangService/src/main/resources/mapper/WxMsgValidationcodeMapper.xml +++ b/suimangService/src/main/resources/mapper/WxMsgValidationcodeMapper.xml @@ -12,10 +12,11 @@ + - `id`,`tenant_id`,`parent_tenant_id`,`phone`,`expiretime`,`createtime`,`type`,`msg`,`signature`,`code` + `id`,`tenant_id`,`parent_tenant_id`,`phone`,`expiretime`,`createtime`,`type`,`msg`,`signature`,`code`,`project_type` @@ -35,6 +36,7 @@ and `signature` = #{signature} and `code` = #{code} and date_format(`createtime`,'%Y-%m-%d') = #{createtimeStr} + and `project_type` = #{projectType} and id in