From 8c650e5dc0edbbb88a726dacd915fa9cf4e82af9 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Mon, 24 Feb 2025 01:14:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=AE=B6=E7=89=88=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E4=B8=8E=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../account/controller/LoginController.java | 52 ++++-- .../service/AccountUserBaseService.java | 16 +- .../impl/AccountUserBaseServiceImpl.java | 173 +++++++++++++----- .../AccountUserBindConnectServiceImpl.java | 5 +- .../mall/common/constant/AuthConstant.java | 5 + .../mall/common/constant/CommonConstant.java | 9 +- .../suisung/mall/common/domain/UserDto.java | 15 +- .../impl/ShopOrderBaseServiceImpl.java | 5 +- .../impl/ShopPlantformSubsiteServiceImpl.java | 5 +- .../impl/ShopStoreBaseServiceImpl.java | 11 +- .../impl/ShopStoreEmployeeServiceImpl.java | 8 +- .../impl/SyncThirdDataServiceImpl.java | 8 +- 12 files changed, 227 insertions(+), 85 deletions(-) diff --git a/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java b/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java index b825abad..91e38d10 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java +++ b/mall-account/src/main/java/com/suisung/mall/account/controller/LoginController.java @@ -73,7 +73,7 @@ public class LoginController extends BaseControllerImpl { CommonResult result = accountUserBaseService.login(params); - //user_account判断是否手机号 + // user_account 判断是否绑定了手机号 if (result != null && result.getStatus() != 200L && Validator.isNumber(user_account)) { user_account = CommonConstant.IDD_ZH_CN + user_account; if (PhoneNumberUtils.isValidNumber(user_account)) { @@ -116,6 +116,18 @@ public class LoginController extends BaseControllerImpl { return result; } + /** + * 注册后直接登录 + * + * @param user_account + * @param user_email + * @param user_mobile + * @param verify_code + * @param rand_key + * @param verify_token + * @param user_password + * @return + */ @RequestMapping(value = "/register", method = {RequestMethod.GET, RequestMethod.POST}) public CommonResult register( @RequestParam(name = "user_account", required = false) String user_account, @@ -149,6 +161,30 @@ public class LoginController extends BaseControllerImpl { return accountUserBaseService.login(params); } + + @ApiOperation(value = "手机验证码登录") + @RequestMapping(value = "/doSmsLogin", method = RequestMethod.GET) + public CommonResult doSmsLogin(@RequestParam(name = "user_mobile") String user_mobile, + @RequestParam(name = "rand_key") String rand_key, + @RequestParam(name = "verify_code") String verify_code) { + return accountUserBaseService.doSmsLogin(user_mobile, rand_key, verify_code); + } + + @ApiOperation(value = "APP互联登录") + @RequestMapping(value = "/doAppConnectLogin", method = RequestMethod.GET) + public CommonResult doAppConnectLogin(@RequestParam(name = "bind_name") String bind_name, + @RequestParam(name = "code") String code) { + return CommonResult.success(accountUserBaseService.doAppConnectLogin(bind_name, code)); + } + + @ApiOperation(value = "商家版注册与登录") + @RequestMapping(value = "/doMerchSmsRegisterAndLogin", method = RequestMethod.POST) + public CommonResult doMerchSmsRegisterAndLogin(@RequestParam(name = "user_mobile") String user_mobile, + @RequestParam(name = "rand_key") String rand_key, + @RequestParam(name = "verify_code") String verify_code) { + return accountUserBaseService.doMerchSmsRegisterAndLogin(user_mobile, rand_key, verify_code); + } + @ApiOperation("退出登录") @RequestMapping(value = "/doLogout", method = RequestMethod.GET) public CommonResult doLogout() { @@ -199,19 +235,5 @@ public class LoginController extends BaseControllerImpl { return CommonResult.success(accountUserBaseService.setNewPassword(channel_verify_key, channel_verify_code, pwd, channel)); } - @ApiOperation(value = "手机验证码登录") - @RequestMapping(value = "/doSmsLogin", method = RequestMethod.GET) - public CommonResult doSmsLogin(@RequestParam(name = "user_mobile") String user_mobile, - @RequestParam(name = "rand_key") String rand_key, - @RequestParam(name = "verify_code") String verify_code) { - return accountUserBaseService.doSmsLogin(user_mobile, rand_key, verify_code); - } - - @ApiOperation(value = "APP互联登录") - @RequestMapping(value = "/doAppConnectLogin", method = RequestMethod.GET) - public CommonResult doAppConnectLogin(@RequestParam(name = "bind_name") String bind_name, - @RequestParam(name = "code") String code) { - return CommonResult.success(accountUserBaseService.doAppConnectLogin(bind_name, code)); - } } diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java index aa55d8ff..12b7c2a4 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/AccountUserBaseService.java @@ -70,7 +70,7 @@ public interface AccountUserBaseService extends IBaseService { /** * 绑定手机号操作 * - * @param user_intl 手机区号 + * @param user_intl 手机区号 * @param currentUser 用户登录信息 */ Integer doBindMobile(String user_intl, String mobile, UserDto currentUser); @@ -87,6 +87,16 @@ public interface AccountUserBaseService extends IBaseService { CommonResult doSmsLogin(String user_mobile, String rand_key, String verify_code); + /** + * 入驻商家注册和登录一体接口 + * + * @param user_mobile + * @param rand_key 防机器人刷验证码 + * @param verify_code + * @return + */ + CommonResult doMerchSmsRegisterAndLogin(String user_mobile, String rand_key, String verify_code); + Map doAppConnectLogin(String bind_name, String code); CommonResult doMobileBindLogin(String user_mobile, String verify_code); @@ -125,6 +135,7 @@ public interface AccountUserBaseService extends IBaseService { /** * google互联登录 - 回调登录 + * * @param result * @return */ @@ -132,12 +143,14 @@ public interface AccountUserBaseService extends IBaseService { /** * 跳转登录 + * * @param response */ void googleLogin(HttpServletResponse response); /** * google互联登录 - 回调 + * * @param response * @param code */ @@ -147,6 +160,7 @@ public interface AccountUserBaseService extends IBaseService { /** * 判断店铺某个昵称是否存在 + * * @param nickname * @param storeId * @return diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java index aacd85f9..b15c3b59 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java @@ -56,7 +56,6 @@ import com.suisung.mall.common.utils.*; import com.suisung.mall.common.utils.constbank.RSAUtil; import com.suisung.mall.common.utils.phone.PhoneNumberUtils; import com.suisung.mall.common.utils.pojo.dto.EmailDTO; -import com.suisung.mall.core.web.service.CloundService; import com.suisung.mall.core.web.service.RedisService; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import io.seata.common.util.StringUtils; @@ -133,67 +132,66 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl params) { Boolean hasKey = false; - String verificationCode = params.get("verify_code"); - if (StrUtil.isNotBlank(verificationCode)) { - hasKey = redisService.hasKey(verificationCode); + // 短信验证码 + String verifyCode = params.get("verify_code"); + if (StrUtil.isNotBlank(verifyCode)) { + hasKey = redisService.hasKey(verifyCode); if (!hasKey) { + //验证码错误 throw new ApiException(ResultCode.VERIFYCODE_FAILED); } } + // JWT Oauth2 生成用户登录 token + // 返回:token、refreshToken、tokenHead、expireIn CommonResult restResult = authService.getAccessToken(params); - -// if (restResult.getStatus() != 200 && restResult.getMsg().contains(I18nUtil._("用户名或密码"))) { -// throw new ApiException(ResultCode.USERPWD_FAILED); -// } - if (restResult.getStatus() != 200) { return restResult; } - //成功使用,删除验证码 + // 鉴权成功,删除短信验证码 if (hasKey) { - redisService.del(verificationCode); + redisService.del(verifyCode); } // 解析获取user 信息 Map data = (Map) restResult.getData(); String token = (String) data.get("token"); JWSObject jwsObject = null; - + String JWSObjectPayload = ""; try { jwsObject = JWSObject.parse(token); + JWSObjectPayload = jwsObject.getPayload().toString(); + logger.debug("jwsObject记录:{}", JWSObjectPayload); } catch (ParseException e) { logger.error("解析token信息异常:{} {}", e.getMessage(), e); } - UserDto userDto = JSONUtil.toBean(jwsObject.getPayload().toString(), UserDto.class); + // 填充登录用户信息 + UserDto userDto = JSONUtil.toBean(JWSObjectPayload, UserDto.class); Integer user_id = userDto.getId(); Integer rid = userDto.getRole_id(); + + // 获取用户信息 Map userInfo = getUserInfo(user_id); - Map bind = bindConnectService.getBind(user_id, BindCode.MOBILE); + if (userInfo == null) { + throw new ApiException(_("无法获取用户信息!")); + } + data.putAll(userInfo); data.put("id", user_id); data.put("k", token); data.put("key", token); - data.put("rid", rid); + data.put("rid", rid); // 用户角色 rid:0-用户;2-商家;3-门店;9-平台; - if (null != bind) { - CookieUtils.setCookie("as", "1"); - data.put("as", 1); - } else { - CookieUtils.setCookie("as", "0"); - data.put("as", 0); - } + String as = bindConnectService.getBind(user_id, BindCode.MOBILE) == null ? "0" : "1"; + data.put("as", as); + CookieUtils.setCookie("as", as); // IM连接配置信息 try { @@ -203,6 +201,14 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl userInfo = new HashMap<>(); + userInfo.put("user_mobile", user_mobile); + // 密码要随机数 + String user_password = com.suisung.mall.common.utils.StringUtils.random(6, com.suisung.mall.common.utils.StringUtils.RandomType.STRING); + userInfo.put("user_password", user_password); + userInfo.put("is_admin", CommonConstant.USER_TYPE_MCH); // 商家入驻注册 + + accountUserBase = register(userInfo); + if (accountUserBase == null) { + throw new ApiException(_("账号注册失败!")); + } + + // TODO 发送短信通知用户,告知用户随机密码 + // 尊敬的商家用户,你们刚注册账号的账号密码为:" + user_password + ",请妥善保管,以免丢失。 + } + + Map params = new HashMap<>(); + params.put("client_id", isMerch ? AuthConstant.MCH_CLIENT_ID : AuthConstant.MOBILE_CLIENT_ID); + params.put("client_secret", AuthConstant.AUTHORITY_MOBILE_SECRET); + params.put("grant_type", "password"); + params.put("verify_pwd", "1001"); // 是否验证密码 1001:不验证;1002:验证(内部登录没有用户明文密码,只能不验证) + params.put("username", accountUserBase.getUser_account()); + params.put("password", ""); +// params.put("is_merch", "1"); // 是否为商家入驻 1-是;其他-否 + + return login(params); + } + @Override public Map doAppConnectLogin(String bind_name, String code) { String id_prefix = ""; diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBindConnectServiceImpl.java b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBindConnectServiceImpl.java index 10fd8763..13705a1e 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBindConnectServiceImpl.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBindConnectServiceImpl.java @@ -14,9 +14,9 @@ import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.modules.account.AccountUserBase; import com.suisung.mall.common.modules.account.AccountUserBindConnect; import com.suisung.mall.common.modules.account.AccountUserInfo; -import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.I18nUtil; +import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -83,7 +83,6 @@ public class AccountUserBindConnectServiceImpl extends BaseServiceImpl roles; - // 服务端返回rid 角色编号 0-用户;2-商家;3-门店;9-平台; private Integer role_id; private Integer site_id = 0; //分站编号 - - private String user_nickname; private String store_id; private String chain_id; @@ -56,5 +54,12 @@ public class UserDto { return ObjectUtil.equal(client_id, AuthConstant.MOBILE_CLIENT_ID); } - + /** + * 入驻商家端 + * + * @return + */ + public boolean isMerchant() { + return ObjectUtil.equal(client_id, AuthConstant.MCH_CLIENT_ID); + } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java index 4a788111..44208c5e 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java @@ -101,7 +101,6 @@ import org.apache.ibatis.annotations.Param; 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.util.Pair; import org.springframework.jdbc.datasource.DataSourceTransactionManager; @@ -1369,7 +1368,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl employeeQueryWrapper = new QueryWrapper<>(); - employeeQueryWrapper.eq("store_id", distributor_id).eq("employee_is_admin", 1); + employeeQueryWrapper.eq("store_id", distributor_id).eq("employee_is_admin", CommonConstant.USER_TYPE_ADMIN); ShopStoreEmployee epl_row = storeEmployeeService.findOne(employeeQueryWrapper); if (epl_row != null && ObjectUtil.equal(epl_row.getUser_id(), distributor_user_id)) { @@ -3346,7 +3345,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl wrapper = new QueryWrapper<>(); wrapper.eq("user_id", user_id); - wrapper.eq("employee_is_admin", 1); + wrapper.eq("employee_is_admin", CommonConstant.USER_TYPE_ADMIN); List rows = shopStoreEmployeeService.find(wrapper); BigDecimal waiting_withdraw_order_payment_amount = BigDecimal.ZERO; diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/plantform/service/impl/ShopPlantformSubsiteServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/plantform/service/impl/ShopPlantformSubsiteServiceImpl.java index cccd0c88..0766f4fe 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/plantform/service/impl/ShopPlantformSubsiteServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/plantform/service/impl/ShopPlantformSubsiteServiceImpl.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.api.ResultCode; +import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.domain.UserDto; import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.feignService.AccountService; @@ -173,7 +174,7 @@ public class ShopPlantformSubsiteServiceImpl extends BaseServiceImpl wrapper = new QueryWrapper<>(); wrapper.eq("store_id", store_id); - wrapper.eq("employee_is_admin", 1); + wrapper.eq("employee_is_admin", CommonConstant.USER_TYPE_ADMIN); ShopStoreEmployee epl_row = shopStoreEmployeeService.findOne(wrapper); if (epl_row != null) { @@ -1642,7 +1643,7 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl wrapper = new QueryWrapper<>(); wrapper.eq("user_id", user_id); - wrapper.eq("employee_is_admin", 1); + wrapper.eq("employee_is_admin", CommonConstant.USER_TYPE_ADMIN); //判断店铺是否存在。 ShopStoreEmployee epl_row = shopStoreEmployeeService.findOne(wrapper); @@ -1863,7 +1864,7 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl employeeQueryWrapper = new QueryWrapper<>(); - employeeQueryWrapper.eq("user_id", user_id).eq("employee_is_admin", 1); + employeeQueryWrapper.eq("user_id", user_id).eq("employee_is_admin", CommonConstant.USER_TYPE_ADMIN); ShopStoreEmployee epl_row = shopStoreEmployeeService.findOne(employeeQueryWrapper); Integer store_id = 0; @@ -2787,7 +2788,7 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("user_id", user_id).eq("employee_is_admin", 1); + queryWrapper.eq("user_id", user_id).eq("employee_is_admin", CommonConstant.USER_TYPE_ADMIN); ShopStoreEmployee epl_row = shopStoreEmployeeService.findOne(queryWrapper); if (epl_row != null) { diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreEmployeeServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreEmployeeServiceImpl.java index fe9af327..c4ee8546 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreEmployeeServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreEmployeeServiceImpl.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.api.ResultCode; import com.suisung.mall.common.api.StateCode; +import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.domain.UserDto; import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.feignService.AccountService; @@ -27,7 +28,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; @@ -135,7 +135,7 @@ public class ShopStoreEmployeeServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.eq("store_id", store_id); - queryWrapper.eq("employee_is_admin", 1); + queryWrapper.eq("employee_is_admin", CommonConstant.USER_TYPE_ADMIN); ShopStoreEmployee row = findOne(queryWrapper); return row.getUser_id(); @@ -152,7 +152,7 @@ public class ShopStoreEmployeeServiceImpl extends BaseServiceImpl employeeOptional = employeeList.stream().filter(s -> s.getEmployee_is_admin() == 1).findFirst(); + Optional employeeOptional = employeeList.stream().filter(s -> s.getEmployee_is_admin() == CommonConstant.USER_TYPE_ADMIN).findFirst(); if (employeeOptional.isPresent()) { throw new ApiException(I18nUtil._("不可移除店铺管理员!")); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java index 476865ec..f3f48ee9 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java @@ -124,7 +124,7 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { newProductType.setType_name(o.getStr("product_type")); newProductType.setType_buildin(0); - if(productTypeService.save(newProductType)){ + if (productTypeService.save(newProductType)) { typeId = newProductType.getType_id(); } } @@ -148,7 +148,7 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { firstCate.setStore_id(storeId); firstCate.setType_id(typeId); firstCate.setData_source(2); - if (productCategoryService.saveOrUpdate(firstCate)){ + if (productCategoryService.saveOrUpdate(firstCate)) { // 当前子分类的父类id firstParentId = firstCate.getId(); list.get(i).setParent_id(firstParentId); @@ -172,7 +172,7 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { secondCate.setStore_id(storeId); secondCate.setType_id(typeId); secondCate.setData_source(2); - if (productCategoryService.saveOrUpdate(secondCate)){ + if (productCategoryService.saveOrUpdate(secondCate)) { // 当前子分类的第二级父类id list.get(i).setParent_id(secondCate.getId()); } @@ -423,7 +423,7 @@ public class SyncThirdDataServiceImpl implements SyncThirdDataService { accountUserBase.setUser_account(StringUtils.generateUniqueCode(8)); accountUserBase.setUser_nickname(member.getUser_nickname()); accountUserBase.setUser_state(2);// 状态(ENUM):0-锁定;1-未激活;2-已激活; - accountUserBase.setUser_is_admin(0); + accountUserBase.setUser_is_admin(CommonConstant.USER_TYPE_NORMAL); accountUserBase.setStore_ids(storeId); accountUserBase.setRights_group_id("0");// 普通用户,不是商家 accountUserBase.setUser_type("0");