Commit 6fbb7d6d6dca4003c8fb9cfeab2c2cfa88b736db
1 parent
b6e63e88
终端类型参数改为从Controller传入
Showing
10 changed files
with
29 additions
and
44 deletions
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/servlet/ServletUtils.java
| 1 | 1 | package cn.iocoder.yudao.framework.common.util.servlet; |
| 2 | 2 | |
| 3 | -import cn.hutool.core.convert.Convert; | |
| 4 | 3 | import cn.hutool.core.io.IoUtil; |
| 5 | 4 | import cn.hutool.core.util.StrUtil; |
| 6 | 5 | import cn.hutool.extra.servlet.ServletUtil; |
| ... | ... | @@ -89,18 +88,6 @@ public class ServletUtils { |
| 89 | 88 | return ServletUtil.getClientIP(request); |
| 90 | 89 | } |
| 91 | 90 | |
| 92 | - public static Integer getTerminal() { | |
| 93 | - return getHeaderInt("terminal"); | |
| 94 | - } | |
| 95 | - | |
| 96 | - public static String getHeader(String header) { | |
| 97 | - return getHeader(getRequest(), header); | |
| 98 | - } | |
| 99 | - | |
| 100 | - public static Integer getHeaderInt(String header) { | |
| 101 | - return Convert.toInt(getHeader(header)); | |
| 102 | - } | |
| 103 | - | |
| 104 | 91 | public static boolean isJsonRequest(ServletRequest request) { |
| 105 | 92 | return StrUtil.startWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE); |
| 106 | 93 | } |
| ... | ... | @@ -121,11 +108,4 @@ public class ServletUtils { |
| 121 | 108 | return ServletUtil.getParamMap(request); |
| 122 | 109 | } |
| 123 | 110 | |
| 124 | - public static String getHeader(HttpServletRequest request, String header) { | |
| 125 | - if (request == null) { | |
| 126 | - return null; | |
| 127 | - } | |
| 128 | - return request.getHeader(header); | |
| 129 | - } | |
| 130 | - | |
| 131 | 111 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java
| ... | ... | @@ -61,8 +61,9 @@ public class AppTradeOrderController { |
| 61 | 61 | @PostMapping("/create") |
| 62 | 62 | @Operation(summary = "创建订单") |
| 63 | 63 | @PreAuthenticated |
| 64 | - public CommonResult<AppTradeOrderCreateRespVO> createOrder(@Valid @RequestBody AppTradeOrderCreateReqVO createReqVO) { | |
| 65 | - TradeOrderDO order = tradeOrderUpdateService.createOrder(getLoginUserId(), getClientIP(), createReqVO); | |
| 64 | + public CommonResult<AppTradeOrderCreateRespVO> createOrder(@Valid @RequestBody AppTradeOrderCreateReqVO createReqVO, | |
| 65 | + @RequestHeader Integer terminal) { | |
| 66 | + TradeOrderDO order = tradeOrderUpdateService.createOrder(getLoginUserId(), getClientIP(), createReqVO, terminal); | |
| 66 | 67 | return success(new AppTradeOrderCreateRespVO().setId(order.getId()).setPayOrderId(order.getPayOrderId())); |
| 67 | 68 | } |
| 68 | 69 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.service.order; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.TerminalEnum; | |
| 3 | 4 | import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO; |
| 4 | 5 | import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO; |
| 5 | 6 | import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderUpdateAddressReqVO; |
| ... | ... | @@ -37,9 +38,10 @@ public interface TradeOrderUpdateService { |
| 37 | 38 | * @param userId 登录用户 |
| 38 | 39 | * @param userIp 用户 IP 地址 |
| 39 | 40 | * @param createReqVO 创建交易订单请求模型 |
| 41 | + * @param terminal 终端 {@link TerminalEnum} | |
| 40 | 42 | * @return 交易订单的 |
| 41 | 43 | */ |
| 42 | - TradeOrderDO createOrder(Long userId, String userIp, AppTradeOrderCreateReqVO createReqVO); | |
| 44 | + TradeOrderDO createOrder(Long userId, String userIp, AppTradeOrderCreateReqVO createReqVO, Integer terminal); | |
| 43 | 45 | |
| 44 | 46 | /** |
| 45 | 47 | * 更新交易订单已支付 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
| ... | ... | @@ -11,7 +11,6 @@ import cn.iocoder.yudao.framework.common.core.KeyValue; |
| 11 | 11 | import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; |
| 12 | 12 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 13 | 13 | import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; |
| 14 | -import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; | |
| 15 | 14 | import cn.iocoder.yudao.module.member.api.address.AddressApi; |
| 16 | 15 | import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO; |
| 17 | 16 | import cn.iocoder.yudao.module.pay.api.order.PayOrderApi; |
| ... | ... | @@ -159,11 +158,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { |
| 159 | 158 | @Override |
| 160 | 159 | @Transactional(rollbackFor = Exception.class) |
| 161 | 160 | @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CREATE) |
| 162 | - public TradeOrderDO createOrder(Long userId, String userIp, AppTradeOrderCreateReqVO createReqVO) { | |
| 161 | + public TradeOrderDO createOrder(Long userId, String userIp, AppTradeOrderCreateReqVO createReqVO, Integer terminal) { | |
| 163 | 162 | // 1.1 价格计算 |
| 164 | 163 | TradePriceCalculateRespBO calculateRespBO = calculatePrice(userId, createReqVO); |
| 165 | 164 | // 1.2 构建订单 |
| 166 | - TradeOrderDO order = buildTradeOrder(userId, userIp, createReqVO, calculateRespBO); | |
| 165 | + TradeOrderDO order = buildTradeOrder(userId, userIp, createReqVO, calculateRespBO, terminal); | |
| 167 | 166 | List<TradeOrderItemDO> orderItems = buildTradeOrderItems(order, calculateRespBO); |
| 168 | 167 | |
| 169 | 168 | // 2. 订单创建前的逻辑 |
| ... | ... | @@ -180,15 +179,14 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { |
| 180 | 179 | } |
| 181 | 180 | |
| 182 | 181 | private TradeOrderDO buildTradeOrder(Long userId, String clientIp, AppTradeOrderCreateReqVO createReqVO, |
| 183 | - TradePriceCalculateRespBO calculateRespBO) { | |
| 182 | + TradePriceCalculateRespBO calculateRespBO, Integer terminal) { | |
| 184 | 183 | TradeOrderDO order = TradeOrderConvert.INSTANCE.convert(userId, clientIp, createReqVO, calculateRespBO); |
| 185 | 184 | order.setType(calculateRespBO.getType()); |
| 186 | 185 | order.setNo(tradeNoRedisDAO.generate(TradeNoRedisDAO.TRADE_ORDER_NO_PREFIX)); |
| 187 | 186 | order.setStatus(TradeOrderStatusEnum.UNPAID.getStatus()); |
| 188 | 187 | order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()); |
| 189 | 188 | order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum)); |
| 190 | - // TODO @疯狂:无状态,terminal 不从 servletuTILS 拿,而是通过 controller 传递给 service; | |
| 191 | - order.setTerminal(ServletUtils.getTerminal()); | |
| 189 | + order.setTerminal(terminal); | |
| 192 | 190 | // 支付 + 退款信息 |
| 193 | 191 | order.setAdjustPrice(0).setPayStatus(false); |
| 194 | 192 | order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()).setRefundPrice(0); | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceTest.java
| ... | ... | @@ -152,7 +152,7 @@ public class TradeOrderUpdateServiceTest extends BaseDbUnitTest { |
| 152 | 152 | }))).thenReturn(1000L); |
| 153 | 153 | |
| 154 | 154 | // 调用方法 |
| 155 | - TradeOrderDO order = tradeOrderUpdateService.createOrder(userId, userIp, reqVO); | |
| 155 | + TradeOrderDO order = tradeOrderUpdateService.createOrder(userId, userIp, reqVO, null); | |
| 156 | 156 | // 断言 TradeOrderDO 订单 |
| 157 | 157 | List<TradeOrderDO> tradeOrderDOs = tradeOrderMapper.selectList(); |
| 158 | 158 | assertEquals(tradeOrderDOs.size(), 1); | ... | ... |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java
| ... | ... | @@ -65,8 +65,9 @@ public class AppAuthController { |
| 65 | 65 | |
| 66 | 66 | @PostMapping("/sms-login") |
| 67 | 67 | @Operation(summary = "使用手机 + 验证码登录") |
| 68 | - public CommonResult<AppAuthLoginRespVO> smsLogin(@RequestBody @Valid AppAuthSmsLoginReqVO reqVO) { | |
| 69 | - return success(authService.smsLogin(reqVO)); | |
| 68 | + public CommonResult<AppAuthLoginRespVO> smsLogin(@RequestBody @Valid AppAuthSmsLoginReqVO reqVO, | |
| 69 | + @RequestHeader Integer terminal) { | |
| 70 | + return success(authService.smsLogin(reqVO, terminal)); | |
| 70 | 71 | } |
| 71 | 72 | |
| 72 | 73 | @PostMapping("/send-sms-code") | ... | ... |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthService.java
| 1 | 1 | package cn.iocoder.yudao.module.member.service.auth; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.TerminalEnum; | |
| 3 | 4 | import cn.iocoder.yudao.module.member.controller.app.auth.vo.*; |
| 4 | 5 | |
| 5 | 6 | import javax.validation.Valid; |
| ... | ... | @@ -31,10 +32,11 @@ public interface MemberAuthService { |
| 31 | 32 | /** |
| 32 | 33 | * 手机 + 验证码登陆 |
| 33 | 34 | * |
| 34 | - * @param reqVO 登陆信息 | |
| 35 | + * @param reqVO 登陆信息 | |
| 36 | + * @param terminal 终端 {@link TerminalEnum} | |
| 35 | 37 | * @return 登录结果 |
| 36 | 38 | */ |
| 37 | - AppAuthLoginRespVO smsLogin(@Valid AppAuthSmsLoginReqVO reqVO); | |
| 39 | + AppAuthLoginRespVO smsLogin(@Valid AppAuthSmsLoginReqVO reqVO, Integer terminal); | |
| 38 | 40 | |
| 39 | 41 | /** |
| 40 | 42 | * 社交登录,使用 code 授权码 | ... | ... |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/auth/MemberAuthServiceImpl.java
| ... | ... | @@ -5,6 +5,7 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; |
| 5 | 5 | import cn.hutool.core.lang.Assert; |
| 6 | 6 | import cn.hutool.core.util.ObjectUtil; |
| 7 | 7 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| 8 | +import cn.iocoder.yudao.framework.common.enums.TerminalEnum; | |
| 8 | 9 | import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; |
| 9 | 10 | import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils; |
| 10 | 11 | import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; |
| ... | ... | @@ -78,13 +79,13 @@ public class MemberAuthServiceImpl implements MemberAuthService { |
| 78 | 79 | |
| 79 | 80 | @Override |
| 80 | 81 | @Transactional |
| 81 | - public AppAuthLoginRespVO smsLogin(AppAuthSmsLoginReqVO reqVO) { | |
| 82 | + public AppAuthLoginRespVO smsLogin(AppAuthSmsLoginReqVO reqVO, Integer terminal) { | |
| 82 | 83 | // 校验验证码 |
| 83 | 84 | String userIp = getClientIP(); |
| 84 | 85 | smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_LOGIN.getScene(), userIp)); |
| 85 | 86 | |
| 86 | 87 | // 获得获得注册用户 |
| 87 | - MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp); | |
| 88 | + MemberUserDO user = userService.createUserIfAbsent(reqVO.getMobile(), userIp, terminal); | |
| 88 | 89 | Assert.notNull(user, "获取用户失败,结果为空"); |
| 89 | 90 | |
| 90 | 91 | // 如果 socialType 非空,说明需要绑定社交用户 |
| ... | ... | @@ -128,7 +129,7 @@ public class MemberAuthServiceImpl implements MemberAuthService { |
| 128 | 129 | throw exception(AUTH_WEIXIN_MINI_APP_PHONE_CODE_ERROR); |
| 129 | 130 | } |
| 130 | 131 | // 获得获得注册用户 |
| 131 | - MemberUserDO user = userService.createUserIfAbsent(phoneNumberInfo.getPurePhoneNumber(), getClientIP()); | |
| 132 | + MemberUserDO user = userService.createUserIfAbsent(phoneNumberInfo.getPurePhoneNumber(), getClientIP(), TerminalEnum.WECHAT_MINI_PROGRAM.getTerminal()); | |
| 132 | 133 | Assert.notNull(user, "获取用户失败,结果为空"); |
| 133 | 134 | |
| 134 | 135 | // 绑定社交用户 | ... | ... |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java
| 1 | 1 | package cn.iocoder.yudao.module.member.service.user; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.TerminalEnum; | |
| 3 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | 5 | import cn.iocoder.yudao.framework.common.validation.Mobile; |
| 5 | 6 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; |
| ... | ... | @@ -43,9 +44,10 @@ public interface MemberUserService { |
| 43 | 44 | * |
| 44 | 45 | * @param mobile 手机号 |
| 45 | 46 | * @param registerIp 注册 IP |
| 47 | + * @param terminal 终端 {@link TerminalEnum} | |
| 46 | 48 | * @return 用户对象 |
| 47 | 49 | */ |
| 48 | - MemberUserDO createUserIfAbsent(@Mobile String mobile, String registerIp); | |
| 50 | + MemberUserDO createUserIfAbsent(@Mobile String mobile, String registerIp, Integer terminal); | |
| 49 | 51 | |
| 50 | 52 | /** |
| 51 | 53 | * 更新用户的最后登陆信息 | ... | ... |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java
| ... | ... | @@ -7,7 +7,6 @@ import cn.hutool.core.util.ObjectUtil; |
| 7 | 7 | import cn.hutool.core.util.StrUtil; |
| 8 | 8 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| 9 | 9 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 10 | -import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; | |
| 11 | 10 | import cn.iocoder.yudao.module.infra.api.file.FileApi; |
| 12 | 11 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; |
| 13 | 12 | import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; |
| ... | ... | @@ -81,17 +80,17 @@ public class MemberUserServiceImpl implements MemberUserService { |
| 81 | 80 | |
| 82 | 81 | @Override |
| 83 | 82 | @Transactional(rollbackFor = Exception.class) |
| 84 | - public MemberUserDO createUserIfAbsent(String mobile, String registerIp) { | |
| 83 | + public MemberUserDO createUserIfAbsent(String mobile, String registerIp, Integer terminal) { | |
| 85 | 84 | // 用户已经存在 |
| 86 | 85 | MemberUserDO user = memberUserMapper.selectByMobile(mobile); |
| 87 | 86 | if (user != null) { |
| 88 | 87 | return user; |
| 89 | 88 | } |
| 90 | 89 | // 用户不存在,则进行创建 |
| 91 | - return createUser(mobile, registerIp); | |
| 90 | + return createUser(mobile, registerIp, terminal); | |
| 92 | 91 | } |
| 93 | 92 | |
| 94 | - private MemberUserDO createUser(String mobile, String registerIp) { | |
| 93 | + private MemberUserDO createUser(String mobile, String registerIp, Integer terminal) { | |
| 95 | 94 | // 生成密码 |
| 96 | 95 | String password = IdUtil.fastSimpleUUID(); |
| 97 | 96 | // 插入用户 |
| ... | ... | @@ -100,8 +99,7 @@ public class MemberUserServiceImpl implements MemberUserService { |
| 100 | 99 | user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 |
| 101 | 100 | user.setPassword(encodePassword(password)); // 加密密码 |
| 102 | 101 | user.setRegisterIp(registerIp); |
| 103 | - // TODO @疯狂:无状态,terminal 不从 servletuTILS 拿,而是通过 controller 传递给 service; | |
| 104 | - user.setRegisterTerminal(ServletUtils.getTerminal()); | |
| 102 | + user.setRegisterTerminal(terminal); | |
| 105 | 103 | memberUserMapper.insert(user); |
| 106 | 104 | |
| 107 | 105 | // 发送 MQ 消息:用户创建 | ... | ... |