From 74b3557bf43308d8d663565ca0aa37d58ec2781a Mon Sep 17 00:00:00 2001 From: rentaiming <806181062@qq.com> Date: 星期二, 28 五月 2024 14:41:26 +0800 Subject: [PATCH] 写用户端接口 --- ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMiniLoginDTO.java | 21 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/MemberClient.java | 13 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java | 5 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/SecurityConstant.java | 69 ++ ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java | 185 +++++ ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/MemberFallbackFactory.java | 18 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberAddressController.java | 6 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberService.java | 10 ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/MemberArticleCollectionController.java | 10 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java | 4 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceController.java | 10 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberController.java | 32 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/HttpUtils.java | 337 ++++++++++ ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomController.java | 13 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceRiseController.java | 13 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java | 9 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java | 11 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/util/HttpUtils.java | 337 ++++++++++ ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/AlipayAppController.java | 21 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMiniRegisterDTO.java | 20 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java | 6 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AppMiniLoginVO.java | 33 + ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/ArticleController.java | 14 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionBidRecordController.java | 4 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java | 113 +++ ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomGoodsController.java | 17 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/PromotionWishListController.java | 14 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Member.java | 3 ruoyi-modules/ruoyi-member/pom.xml | 6 ruoyi-modules/ruoyi-auction/pom.xml | 14 ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java | 38 + ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceOrderController.java | 8 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java | 46 + ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java | 5 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java | 296 ++++++++- ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/CouponMemberController.java | 8 ruoyi-api/ruoyi-api-system/pom.xml | 6 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/WeiXinAppController.java | 73 + ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/ArticleCommentsController.java | 10 ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/MemberLikeController.java | 9 40 files changed, 1,707 insertions(+), 160 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/pom.xml b/ruoyi-api/ruoyi-api-system/pom.xml index 22ea767..dba587c 100644 --- a/ruoyi-api/ruoyi-api-system/pom.xml +++ b/ruoyi-api/ruoyi-api-system/pom.xml @@ -16,6 +16,12 @@ </description> <dependencies> + + <dependency> + <groupId>commons-httpclient</groupId> + <artifactId>commons-httpclient</artifactId> + <version>3.1</version> + </dependency> <!-- RuoYi Common Core--> <dependency> diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java index 7753a57..0ae2cfd 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java @@ -48,4 +48,10 @@ public R<?> changePassword(@RequestParam("username") String username, @RequestParam("password") String password, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + @PostMapping("/user/getSysUser") + public R<SysUser> getSysUser(@RequestBody Long userId); + + @PostMapping("/user/registerUser") + public R<SysUser> registerUser(@RequestBody SysUser sysUser); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/SecurityConstant.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/SecurityConstant.java new file mode 100644 index 0000000..286918d --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/SecurityConstant.java @@ -0,0 +1,69 @@ +package com.ruoyi.system.api.constants; + +/** + * @author jqs34 + * @ClassName SecurityConstant + * @description: TODO + * @date 2023年02月21日 + * @version: 1.0 + */ +public interface SecurityConstant { + + + /** + * 微信sessionKey前缀 + */ + String SESSION_KEY = "SESSION_KEY:"; + + + /** + * 用户验证码前缀key + */ + String MESSAGE_CODE = "MESSAGE_CODE:"; + + /** + * 用户验证码前缀key + */ + String MINI_CODE = "MINI_CODE:"; + + /** + * 用户验证码前缀key + */ + String WX_TOKEN = "WX_TOKEN"; + + /** + * 省市区列表key + */ + String REGION_LIST = "REGION_LIST"; + + /** + * 省市区列表key + */ + String CITY_LIST = "CITY_LIST"; + + /** + * 秒杀活动商品key前缀 + */ + String ACTIVITY_GOODS = "ACTIVITY_GOODS"; + + /** + * 自动取消订单时间 + */ + String AUTO_CANCEL_ORDER_TIME = "AUTO_CANCEL_ORDER_TIME"; + + /** + * 商户统一分成 + */ + String SHOP_COMMON_PROPORTION = "SHOP_COMMON_PROPORTION"; + + /** + * 自动取消订单时间 + */ + String PAY_MONEY_INTEGRAL = "PAY_MONEY_INTEGRAL"; + + /** + * 用户验证码前缀key + */ + String QY_TOKEN = "QY_TOKEN"; + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AppMiniLoginVO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AppMiniLoginVO.java new file mode 100644 index 0000000..5cf635c --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AppMiniLoginVO.java @@ -0,0 +1,33 @@ +package com.ruoyi.system.api.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AppMiniLoginVO { + + @ApiModelProperty(value = "小程序openid") + private String miniOpenid; + + @ApiModelProperty(value = "微信unionid") + private String wxUnionid; + + @ApiModelProperty(value = "微信sessionKey") + private String sessionKey; + + + @ApiModelProperty("支付宝用戶ID") + private String zfbuserid; + + @ApiModelProperty(value = "用户信息") + private SysUser sysUser; + + @ApiModelProperty(value = "会员id") + private Long memberid; + + @ApiModelProperty(value = "拍卖师电话") + private String phone; + + + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Member.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Member.java index bd410d5..924be2b 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Member.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/Member.java @@ -98,6 +98,7 @@ @ApiModelProperty(value = "1未认证,2已认证") private Integer isAuthentication; - + @ApiModelProperty(value = "后天对应id") + private Long userId; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMiniLoginDTO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMiniLoginDTO.java new file mode 100644 index 0000000..b96e6da --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMiniLoginDTO.java @@ -0,0 +1,21 @@ +package com.ruoyi.system.api.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AppMiniLoginDTO { + + //微信的 + @ApiModelProperty(value = "微信的code") + private String code; + + + //支付宝微信的 + @ApiModelProperty(value = "支付宝的auth_code") + private String auth_code; + + @ApiModelProperty("1支付宝 , 2微信") + private Integer type; + +} \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMiniRegisterDTO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMiniRegisterDTO.java new file mode 100644 index 0000000..9c8b80c --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMiniRegisterDTO.java @@ -0,0 +1,20 @@ +package com.ruoyi.system.api.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AppMiniRegisterDTO { + @ApiModelProperty(value = "openid") + private String miniOpenid; + + @ApiModelProperty(value = "wxUnionid") + private String wxUnionid; + + @ApiModelProperty(value = "支付寶的用戶id") + private String zfbuserid; + + @ApiModelProperty("1支付宝 , 2微信") + private Integer type; + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/MemberFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/MemberFallbackFactory.java index 2a602fc..8e4f588 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/MemberFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/MemberFallbackFactory.java @@ -1,8 +1,11 @@ package com.ruoyi.system.api.factory; import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.MemberAddress; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; +import com.ruoyi.system.api.domain.dto.AppMiniRegisterDTO; import com.ruoyi.system.api.feignClient.MemberClient; import java.util.List; import java.util.Set; @@ -33,6 +36,21 @@ public R<List<Member>> getMemberListByIds(Set<Long> memberIdList, String source) { return R.fail("获取用户列表失败:" + cause.getMessage()); } + + public R<AppMiniLoginVO> miniLogin(AppMiniLoginDTO appMiniLoginDto) + { + return R.fail("登录用户失败:" + cause.getMessage()); + } + + @Override + public R<AppMiniLoginVO> actionMiniLogin(AppMiniLoginDTO appMiniLoginDto) { + return R.fail("拍卖师登录用户失败:" + cause.getMessage()); + } + + @Override + public R<AppMiniLoginVO> miniRegister(AppMiniRegisterDTO appUserRegisterDto) { + return R.fail("注册用户失败:" + cause.getMessage()); + } }; } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java index 5372803..8eab147 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteUserFallbackFactory.java @@ -36,11 +36,20 @@ { return R.fail("注册用户失败:" + throwable.getMessage()); } + @Override + public R<SysUser> registerUser(SysUser sysUser) { + return R.fail("注册用户失败:" + throwable.getMessage()); + } @Override public R<?> changePassword(String username, String password, String source) { return R.fail("修改密码失败:" + throwable.getMessage()); } + + @Override + public R<SysUser> getSysUser(Long userId) { + return R.fail("获取用户失败" + throwable.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/MemberClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/MemberClient.java index 2055777..958b0be 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/MemberClient.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/MemberClient.java @@ -3,8 +3,11 @@ import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.MemberAddress; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; +import com.ruoyi.system.api.domain.dto.AppMiniRegisterDTO; import com.ruoyi.system.api.factory.MemberFallbackFactory; import java.util.List; import java.util.Set; @@ -28,4 +31,14 @@ @PostMapping("/member/list-by-ids") R<List<Member>> getMemberListByIds(@RequestParam("memberIdList") Set<Long> memberIdList, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + @PostMapping("/member/miniLogin") + public R<AppMiniLoginVO> miniLogin(@RequestBody AppMiniLoginDTO appMiniLoginDto); + + @PostMapping("/forepart/auction-salesroom/actionMiniLogin") + public R<AppMiniLoginVO> actionMiniLogin(@RequestBody AppMiniLoginDTO appMiniLoginDto); + + + @PostMapping("/member/miniRegister") + public R<AppMiniLoginVO> miniRegister(@RequestBody AppMiniRegisterDTO appUserRegisterDto); } diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java index b4efd46..0a44c6f 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java @@ -13,8 +13,11 @@ import com.ruoyi.common.security.auth.AuthUtil; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; +import com.ruoyi.system.api.domain.dto.AppMiniRegisterDTO; import com.ruoyi.system.api.feignClient.SysUserClient; import com.ruoyi.system.api.model.LoginUser; import io.swagger.annotations.Api; @@ -54,6 +57,41 @@ private SysUserClient userClient; @Autowired private RedisService redisService; + + + + @ApiOperation("小程序登录") + @PostMapping("miniLogin") + public R<?> miniLogin(@RequestBody AppMiniLoginDTO appMiniLoginDto) + { + // 小程序用户登录 + AppMiniLoginVO appMiniLoginVo = sysLoginService.miniLogin(appMiniLoginDto); + // 获取登录token + return R.ok(tokenService.createMiniToken(appMiniLoginVo)); + } + + @ApiOperation("小程序注册") + @PostMapping("miniRegister") + public R<?> miniRegister(@RequestBody AppMiniRegisterDTO appUserRegisterDto) + { + // 小程序用户登录 + AppMiniLoginVO appMiniLoginVo = sysLoginService.miniRegister(appUserRegisterDto); + // 获取登录token + return R.ok(tokenService.createMiniToken(appMiniLoginVo)); + } + + + @ApiOperation("拍卖师小程序登录") + @PostMapping("actionMiniLogin") + public R<?> actionMiniLogin(@RequestBody AppMiniLoginDTO appMiniLoginDto) + { + // 小程序用户登录 + AppMiniLoginVO appMiniLoginVo = sysLoginService.actionMiniLogin(appMiniLoginDto); + // 获取登录token + return R.ok(tokenService.createMiniToken(appMiniLoginVo)); + } + + @PostMapping("login") @ApiOperation(value = "管理后台-用户登录") public R<?> login(@RequestBody LoginBody form) diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java index 2324bcf..0c77097 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java @@ -13,10 +13,16 @@ import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.RemoteUserService; +import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; +import com.ruoyi.system.api.domain.dto.AppMiniRegisterDTO; +import com.ruoyi.system.api.feignClient.MemberClient; import com.ruoyi.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; + +import javax.annotation.Resource; /** * 登录校验方法 @@ -37,6 +43,9 @@ @Autowired private RedisService redisService; + + @Resource + private MemberClient MemberClient; /** * 登录 @@ -101,6 +110,110 @@ return userInfo; } + + public AppMiniLoginVO miniLogin(AppMiniLoginDTO appMiniLoginDto) + { + // 查询用户信息 + R<AppMiniLoginVO> userResult = MemberClient.miniLogin(appMiniLoginDto); + if (R.FAIL == userResult.getCode()) + { + throw new ServiceException(userResult.getMsg()); + } + AppMiniLoginVO userInfo = userResult.getData(); + SysUser user = userInfo.getSysUser(); + if(user!=null){ + String username = user.getUserName(); + // IP黑名单校验 + String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); + if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) + { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单"); + throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); + } + if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除"); + throw new ServiceException(username,501); + } + if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员"); + throw new ServiceException(username,501); + } + recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功"); + } + return userInfo; + } + + public AppMiniLoginVO miniRegister(AppMiniRegisterDTO appUserRegisterDto) + { + // 查询用户信息 + R<AppMiniLoginVO> userResult = MemberClient.miniRegister(appUserRegisterDto); + if (R.FAIL == userResult.getCode()) + { + throw new ServiceException(userResult.getMsg()); + } + AppMiniLoginVO appMiniRegisterVo = userResult.getData(); + SysUser user=appMiniRegisterVo.getSysUser(); + if(appMiniRegisterVo.getSysUser()!=null){ + String username = user.getUserName(); + // IP黑名单校验 + String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); + if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) + { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单"); + throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); + } + if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除"); + throw new ServiceException("对不起,您的账号: 已被删除"); + } + if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员"); + throw new ServiceException("对不起,您的账号: 已停用"); + } + recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功"); + } + return appMiniRegisterVo; + } + + public AppMiniLoginVO actionMiniLogin(AppMiniLoginDTO appMiniLoginDto) + { + // 查询用户信息 + R<AppMiniLoginVO> userResult = MemberClient.actionMiniLogin(appMiniLoginDto); + if (R.FAIL == userResult.getCode()) + { + throw new ServiceException(userResult.getMsg()); + } + AppMiniLoginVO userInfo = userResult.getData(); + SysUser user = userInfo.getSysUser(); + if(user!=null){ + String username = user.getUserName(); + // IP黑名单校验 + String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); + if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) + { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单"); + throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); + } + if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除"); + throw new ServiceException(username,501); + } + if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员"); + throw new ServiceException(username,501); + } + recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功"); + } + return userInfo; + } + + public void logout(String loginName) { recordLogService.recordLogininfor(loginName, Constants.LOGOUT, "退出成功"); diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java index 56f106e..4cf7d65 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java @@ -128,9 +128,20 @@ public static final String DATE_FORMATTER_TIME = "yyyy-MM-dd HH:mm:ss"; public static final String DATE_FORMATTER_DATE = "yyyy-MM-dd"; + + /** * 定时任务违规的字符 */ public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", "org.springframework", "org.apache", "com.ruoyi.common.core.utils.file" }; + + + public static final Integer FROM_SYSTEM = 0; + + public static final Integer FROM_SHOP = 1; + + public static final Integer FROM_STAFF = 2; + + public static final Integer FROM_MINI_APP = 3; } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java index c122e52..ea4c807 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java @@ -13,6 +13,11 @@ public static final String DETAILS_USER_ID = "user_id"; /** + * 登录端 + */ + public static final String LOGIN_FROM = "login_from"; + + /** * 用户名字段 */ public static final String DETAILS_USERNAME = "username"; diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java index 139ee8b..0351a6b 100644 --- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java +++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java @@ -4,6 +4,9 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import javax.servlet.http.HttpServletRequest; + +import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.system.api.domain.AppMiniLoginVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ruoyi.common.core.constant.CacheConstants; @@ -32,7 +35,8 @@ protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; - private final static long expireTime = CacheConstants.EXPIRATION; + + private final static long EXPIRE_TIME = CacheConstants.EXPIRATION; private final static String ACCESS_TOKEN = CacheConstants.LOGIN_TOKEN_KEY; @@ -61,7 +65,41 @@ // 接口返回信息 Map<String, Object> rspMap = new HashMap<String, Object>(); rspMap.put("access_token", JwtUtils.createToken(claimsMap)); - rspMap.put("expires_in", expireTime); + rspMap.put("expires_in", EXPIRE_TIME); + return rspMap; + } + + public Map<String, Object> createMiniToken(AppMiniLoginVO appMiniLoginVo) + { + LoginUser loginUser = new LoginUser(); + // Jwt存储信息 + Map<String, Object> claimsMap = new HashMap<String, Object>(); + // 接口返回信息 + Map<String, Object> rspMap = new HashMap<String, Object>(); + //用户为空只返回openid + rspMap.put("mobile",""); + rspMap.put("access_token", ""); + if(appMiniLoginVo.getSysUser()!=null){ + loginUser.setSysUser(appMiniLoginVo.getSysUser()); + String token = IdUtils.fastUUID(); + Long userId = loginUser.getSysUser().getUserId(); + String userName = loginUser.getSysUser().getUserName(); + loginUser.setToken(token); + loginUser.setUserid(userId); + loginUser.setUsername(userName); + loginUser.setIpaddr(IpUtils.getIpAddr()); + refreshToken(loginUser); + claimsMap.put(SecurityConstants.USER_KEY, token); + claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); + claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName); + claimsMap.put(SecurityConstants.LOGIN_FROM, Constants.FROM_MINI_APP); + rspMap.put("access_token", JwtUtils.createToken(claimsMap)); + rspMap.put("expires_in", EXPIRE_TIME); + } + rspMap.put("wx_unionid", appMiniLoginVo.getWxUnionid()); + rspMap.put("mini_openid", appMiniLoginVo.getMiniOpenid()); + rspMap.put("zfb_userid", appMiniLoginVo.getZfbuserid()); + rspMap.put("phone",appMiniLoginVo.getPhone()); return rspMap; } @@ -156,10 +194,10 @@ public void refreshToken(LoginUser loginUser) { loginUser.setLoginTime(System.currentTimeMillis()); - loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); + loginUser.setExpireTime(loginUser.getLoginTime() + EXPIRE_TIME * MILLIS_MINUTE); // 根据uuid将loginUser缓存 String userKey = getTokenKey(loginUser.getToken()); - redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + redisService.setCacheObject(userKey, loginUser, EXPIRE_TIME, TimeUnit.MINUTES); } private String getTokenKey(String token) diff --git a/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/ArticleCommentsController.java b/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/ArticleCommentsController.java index 34a7a85..506614a 100644 --- a/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/ArticleCommentsController.java +++ b/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/ArticleCommentsController.java @@ -7,11 +7,7 @@ import com.ruoyi.common.core.domain.R; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.formula.functions.T; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -33,7 +29,7 @@ @PostMapping("/saveMemberArticleComments") @ResponseBody @ApiOperation(value = "添加或者修改用户评论/回复") - public R<T> saveMemberArticleComments(ArticleCommentsDTO articleCommentsDTO) { + public R<T> saveMemberArticleComments(@RequestBody ArticleCommentsDTO articleCommentsDTO) { articleCommentsService.saveMemberArticleComments(articleCommentsDTO); return R.ok(); } @@ -41,7 +37,7 @@ @PostMapping("/delMemberArticleComments") @ResponseBody @ApiOperation(value = "删除用户评论/回复") - public R<T> delMemberArticleComments(ArticleCommentsDTO articleCommentsDTO) { + public R<T> delMemberArticleComments(@RequestBody ArticleCommentsDTO articleCommentsDTO) { articleCommentsService.delMemberArticleComments(articleCommentsDTO); return R.ok(); } diff --git a/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/ArticleController.java b/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/ArticleController.java index c71df1d..c83af76 100644 --- a/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/ArticleController.java +++ b/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/ArticleController.java @@ -15,10 +15,8 @@ import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.formula.functions.T; import javax.annotation.Resource; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; + +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -44,21 +42,21 @@ @PostMapping("/getArticleList") @ResponseBody @ApiOperation(value = "获取资讯") - public R<PageDTO<ArticleVO>> getArticleList(ArticleDTO articleDTO) { + public R<PageDTO<ArticleVO>> getArticleList( @RequestBody ArticleDTO articleDTO) { return R.ok(iArticleService.getArticleList(articleDTO)); } @PostMapping("/getMemberArticleList") @ResponseBody @ApiOperation(value = "获取用户资讯") - public R<PageDTO<Article>> getMemberArticleList(ArticleDTO articleDTO) { + public R<PageDTO<Article>> getMemberArticleList(@RequestBody ArticleDTO articleDTO) { return R.ok(iArticleService.getMemberArticleList(articleDTO)); } @PostMapping("/saveMemberArticle") @ResponseBody @ApiOperation(value = "添加或者修改用户资讯") - public R<T> saveMemberArticle(ArticleDTO articleDTO) { + public R<T> saveMemberArticle(@RequestBody ArticleDTO articleDTO) { iArticleService.saveMemberArticle(articleDTO); return R.ok(); } @@ -66,7 +64,7 @@ @PostMapping("/delMemberArticle") @ResponseBody @ApiOperation(value = "删除用户资讯") - public R<T> delMemberArticle(ArticleDTO articleDTO) { + public R<T> delMemberArticle(@RequestBody ArticleDTO articleDTO) { iArticleService.delMemberArticle(articleDTO); return R.ok(); } diff --git a/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/MemberArticleCollectionController.java b/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/MemberArticleCollectionController.java index 18d7db9..2ea504d 100644 --- a/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/MemberArticleCollectionController.java +++ b/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/MemberArticleCollectionController.java @@ -12,11 +12,7 @@ import com.ruoyi.common.core.utils.page.PageDTO; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.formula.functions.T; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -38,7 +34,7 @@ @PostMapping("/saveMemberArticleCollection") @ResponseBody @ApiOperation(value = "文章收藏和取消收藏") - public R<T> saveMemberArticleCollection(MemberArticleCollectionDTO memberArticleCollectionDTO) { + public R<T> saveMemberArticleCollection( @RequestBody MemberArticleCollectionDTO memberArticleCollectionDTO) { memberArticleCollectionService.saveMemberArticleCollection(memberArticleCollectionDTO); return R.ok(); } @@ -47,7 +43,7 @@ @PostMapping("/getMemberArticleCollection") @ResponseBody @ApiOperation(value = "获取用户收藏资讯") - public R<PageDTO<MemberArticleCollectionVO>> getMemberArticleCollection(ArticleDTO articleDTO) { + public R<PageDTO<MemberArticleCollectionVO>> getMemberArticleCollection( ArticleDTO articleDTO) { return R.ok(memberArticleCollectionService.getMemberArticleCollection(articleDTO)); } diff --git a/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/MemberLikeController.java b/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/MemberLikeController.java index 4f64ecd..b460d53 100644 --- a/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/MemberLikeController.java +++ b/ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/controller/MemberLikeController.java @@ -1,17 +1,12 @@ package com.ruoyi.article.controller; -import com.ruoyi.article.dto.ArticleCommentsDTO; import com.ruoyi.article.dto.MemberLikeDTO; import com.ruoyi.article.service.IMemberLikeService; import com.ruoyi.common.core.domain.R; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.formula.functions.T; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -32,7 +27,7 @@ @PostMapping("/saveMemberLike") @ResponseBody @ApiOperation(value = "文章,评论和回复 点赞和取消点赞") - public R<T> saveMemberLike(MemberLikeDTO memberLikeDTO) { + public R<T> saveMemberLike(@RequestBody MemberLikeDTO memberLikeDTO) { memberLikeService.saveMemberLike(memberLikeDTO); return R.ok(); } diff --git a/ruoyi-modules/ruoyi-auction/pom.xml b/ruoyi-modules/ruoyi-auction/pom.xml index 93abed0..d8c7873 100644 --- a/ruoyi-modules/ruoyi-auction/pom.xml +++ b/ruoyi-modules/ruoyi-auction/pom.xml @@ -52,6 +52,14 @@ <artifactId>spring-boot-starter-actuator</artifactId> </dependency> + <dependency> + <groupId>com.github.binarywang</groupId> + <artifactId>weixin-java-miniapp</artifactId> + <version>4.5.0</version> + </dependency> + + + <!-- Swagger UI --> <dependency> <groupId>io.springfox</groupId> @@ -117,6 +125,12 @@ <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-seata</artifactId> </dependency> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-modules-member</artifactId> + <version>3.6.2</version> + <scope>compile</scope> + </dependency> </dependencies> <build> diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionBidRecordController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionBidRecordController.java index a58727d..d090124 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionBidRecordController.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionBidRecordController.java @@ -8,6 +8,8 @@ import io.swagger.annotations.ApiOperation; import java.util.List; import javax.annotation.Resource; + +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @@ -35,7 +37,7 @@ @RequestMapping("/getAuctionBidRecordList") @ResponseBody @ApiOperation(value = "拍卖大屏滚动出价") - public R<List<AuctionBidRecord>> getAuctionBidRecordList(AuctionSalesroomGoodsDTO auctionSalesroomGoodsDTO) { + public R<List<AuctionBidRecord>> getAuctionBidRecordList(@RequestBody AuctionSalesroomGoodsDTO auctionSalesroomGoodsDTO) { return R.ok(iAuctionBidRecordService.getAuctionBidRecordList(auctionSalesroomGoodsDTO)); } diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomController.java index 7d20e23..1fad76f 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomController.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomController.java @@ -8,6 +8,8 @@ import com.ruoyi.auction.service.IAuctionSalesroomService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.page.PageDTO; +import com.ruoyi.system.api.domain.AppMiniLoginVO; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; import io.swagger.annotations.ApiOperation; import javax.annotation.Resource; import org.springframework.web.bind.annotation.RequestBody; @@ -38,7 +40,7 @@ @RequestMapping("getAuctionBidRecordList") @ResponseBody @ApiOperation(value = "拍卖大屏获取拍卖信息") - public R<PageDTO<AuctionSalesroom>> getAuctionBidRecordList(AuctionSalesroomGoodsDTO ctionSalesroomGoodsDTO) { + public R<PageDTO<AuctionSalesroom>> getAuctionBidRecordList(@RequestBody AuctionSalesroomGoodsDTO ctionSalesroomGoodsDTO) { return R.ok(iAuctionSalesroomService.getAuctionBidRecordList(ctionSalesroomGoodsDTO)); } @@ -50,7 +52,7 @@ @RequestMapping("/getBaaner") @ResponseBody @ApiOperation(value = " 暖场视频or封面海报") - public R<ForepartAuctionSalesroomVO> getBaaner(AuctionSalesroomGoodsDTO ctionSalesroomGoodsDTO) { + public R<ForepartAuctionSalesroomVO> getBaaner(@RequestBody AuctionSalesroomGoodsDTO ctionSalesroomGoodsDTO) { return R.ok(iAuctionSalesroomService.getBaaner(ctionSalesroomGoodsDTO)); } @@ -63,5 +65,12 @@ return R.ok(iAuctionSalesroomService.getAuctionBidRecordOne(arepartAuctionBidRecordDTO)); } + @RequestMapping("/actionMiniLogin") + @ResponseBody + @ApiOperation(value = "拍卖师第三方登陸") + public R<AppMiniLoginVO> actionMiniLogin(@RequestBody AppMiniLoginDTO appMiniLoginDto) { + return R.ok(iAuctionSalesroomService.actionMiniLogin(appMiniLoginDto)); + } + } diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomGoodsController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomGoodsController.java index 88cca43..845cd86 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomGoodsController.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomGoodsController.java @@ -11,6 +11,7 @@ import java.util.List; import javax.annotation.Resource; import org.apache.poi.ss.formula.functions.T; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @@ -38,7 +39,7 @@ @RequestMapping("/getAuctionSalesroomGoods") @ResponseBody @ApiOperation(value = "拍卖大屏的商品介绍") - public R<ForepartAuctionSalesroomGoodsVO> getAuctionSalesroomGoods(AuctionSalesroomGoodsDTO ationSalesroomGoodsDTO) { + public R<ForepartAuctionSalesroomGoodsVO> getAuctionSalesroomGoods(@RequestBody AuctionSalesroomGoodsDTO ationSalesroomGoodsDTO) { return R.ok(iAuctionSalesroomGoodsService.getAuctionSalesroomGoods(ationSalesroomGoodsDTO)); } @@ -53,7 +54,7 @@ @RequestMapping("/getAuctionSalesroominfo") @ResponseBody @ApiOperation(value = "拍卖师端拍卖场信息") - public R<AuctionSalesroomVO> getAuctionSalesroominfo(AuctionSalesroomGoodsDTO ationSalesroomGoodsDTO) { + public R<AuctionSalesroomVO> getAuctionSalesroominfo(@RequestBody AuctionSalesroomGoodsDTO ationSalesroomGoodsDTO) { return R.ok(iAuctionSalesroomGoodsService.getAuctionSalesroominfo(ationSalesroomGoodsDTO)); } @@ -69,7 +70,7 @@ @RequestMapping("/auctionSalesroomStart") @ResponseBody @ApiOperation(value = "拍卖师端拍卖场立即开始") - public R<T> auctionSalesroomStart(AuctionSalesroomGoodsDTO ationSalesroomGoodsDTO) { + public R<T> auctionSalesroomStart(@RequestBody AuctionSalesroomGoodsDTO ationSalesroomGoodsDTO) { iAuctionSalesroomGoodsService.auctionSalesroomStart(ationSalesroomGoodsDTO); return R.ok(); } @@ -82,7 +83,7 @@ @RequestMapping("/auctionSalesroomEnd") @ResponseBody @ApiOperation(value = "拍卖师端拍卖场立即结束") - public R<T> auctionSalesroomEnd(AuctionSalesroomGoodsDTO ationSalesroomGoodsDTO) { + public R<T> auctionSalesroomEnd(@RequestBody AuctionSalesroomGoodsDTO ationSalesroomGoodsDTO) { iAuctionSalesroomGoodsService.auctionSalesroomEnd(ationSalesroomGoodsDTO); return R.ok(); } @@ -95,7 +96,7 @@ @RequestMapping("/isAuctionSalesroom") @ResponseBody @ApiOperation(value = "判断拍卖师端是否还有未拍卖商品") - public R<List<AuctionSalesroomGoods>> isAuctionSalesroom(AuctionSalesroomGoodsDTO ationSalesroomGoodsDTO) { + public R<List<AuctionSalesroomGoods>> isAuctionSalesroom(@RequestBody AuctionSalesroomGoodsDTO ationSalesroomGoodsDTO) { return R.ok(iAuctionSalesroomGoodsService.isAuctionSalesroom(ationSalesroomGoodsDTO)); } @@ -108,7 +109,7 @@ @RequestMapping("/auctionSalesroomGoodsStart") @ResponseBody @ApiOperation(value = "拍卖师端拍卖场下一个立即开始") - public R<T> auctionSalesroomGoodsStart(AuctionSalesroomGoodsDTO auctionSalesroomGoodsDTO) { + public R<T> auctionSalesroomGoodsStart(@RequestBody AuctionSalesroomGoodsDTO auctionSalesroomGoodsDTO) { iAuctionSalesroomGoodsService.auctionSalesroomGoodsStart(auctionSalesroomGoodsDTO); return R.ok(); } @@ -122,8 +123,10 @@ @RequestMapping("/auctionSalesroomGoodsEnd") @ResponseBody @ApiOperation(value = "拍卖师端拍卖商品立即结束") - public R<T> auctionSalesroomGoodsEnd(AuctionSalesroomGoodsDTO auctionSalesroomGoodsDTO) { + public R<T> auctionSalesroomGoodsEnd(@RequestBody AuctionSalesroomGoodsDTO auctionSalesroomGoodsDTO) { iAuctionSalesroomGoodsService.auctionSalesroomGoodsStart(auctionSalesroomGoodsDTO); return R.ok(); } + + } diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java index 463181d..73960b8 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java @@ -6,6 +6,9 @@ import com.ruoyi.auction.controller.forepart.vo.ForepartAuctionSalesroomVO; import com.ruoyi.auction.domain.AuctionSalesroom; import com.ruoyi.common.core.utils.page.PageDTO; +import com.ruoyi.system.api.domain.AppMiniLoginVO; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; +import org.springframework.web.bind.annotation.RequestBody; /** * <p> @@ -30,4 +33,6 @@ AuctionSalesroom getAuctionBidRecordOne(ForepartAuctionBidRecordDTO arepartAuctionBidRecordDTO); + + AppMiniLoginVO actionMiniLogin(@RequestBody AppMiniLoginDTO appMiniLoginDto); } diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java index ba88837..4f571e7 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java @@ -1,5 +1,15 @@ package com.ruoyi.auction.service.impl; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipaySystemOauthTokenRequest; +import com.alipay.api.request.AlipayUserInfoShareRequest; +import com.alipay.api.response.AlipaySystemOauthTokenResponse; +import com.alipay.api.response.AlipayUserInfoShareResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -14,11 +24,27 @@ import com.ruoyi.auction.service.IAuctionVideoService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.PageDTO; +import com.ruoyi.auction.util.HttpUtils; +import com.ruoyi.system.api.constants.SecurityConstant; +import com.ruoyi.system.api.domain.AppMiniLoginVO; +import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; import com.ruoyi.system.api.feignClient.SysUserClient; import javax.annotation.Resource; + +import org.apache.http.HttpResponse; +import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Service; + + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import static com.ruoyi.member.service.impl.MemberServiceImpl.getAccessTokenByWX; /** * <p> @@ -39,6 +65,45 @@ @Resource private SysUserClient sysUserClient; + @Resource + private WxMaService wxMaService; + + + //微信 + private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token"; + + private static final String WX_APPID = "wxb7f0ea286fc4e535"; + + private static final String WX_SECRET = "852a2512a6ab559cafc68bae5d4160ac"; + + + //支付寶 + /** + * Alipay客户端 + */ + private AlipayClient alipayClient; + + /**支付宝网关*/ + /** + * 沙箱的 + */ + private static final String ALIPAY_BORDER_DEV = "https://openapi-sandbox.dl.alipaydev.com/gateway.do"; + /** + * 个人用户的 + */ + private static final String ALIPAY_BORDER_PROD = "https://openapi.alipay.com/gateway.do"; + /** + * appID + **/ + private static final String APP_ID_PROD = "2021003196653501"; + /** + * 私钥 + */ + private static final String APP_PRIVATE_KEY = ""; + /** + * 支付宝公钥 + */ + private static final String ALIPAY_PUBLIC_KEY = ""; @Override public PageDTO<AuctionSalesroom> getAuctionBidRecordList(AuctionSalesroomGoodsDTO ationSalesroomGoodsDTO) { @@ -90,4 +155,124 @@ AuctionSalesroom auctionBidRecord=iAuctionSalesroomService.getOne(wrapper); return auctionBidRecord; } + + @Override + public AppMiniLoginVO actionMiniLogin(AppMiniLoginDTO appMiniLoginDto) { + try { + AppMiniLoginVO appMiniLoginVo = new AppMiniLoginVO(); + if (appMiniLoginDto.getType()==1){ + if (appMiniLoginDto.getAuth_code()== null || appMiniLoginDto.getAuth_code().length() == 0) { + } else { + AppMiniLoginVO user=new AppMiniLoginVO(); + //String serverUrl, String appId, String privateKey, String format,String charset, String alipayPublicKey, String signType + //实例化客户端 参数:正式环境URL,Appid,商户私钥 PKCS8格式,字符编码格式,字符格式,支付宝公钥,签名方式 + AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_BORDER_PROD,APP_ID_PROD, APP_PRIVATE_KEY, "json", "GBK", ALIPAY_PUBLIC_KEY, "RSA2"); + AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); + // 值为authorization_code时,代表用code换取 + request.setGrantType("authorization_code"); + //授权码,用户对应用授权后得到的 + request.setCode(appMiniLoginDto.getAuth_code()); + //这里使用execute方法 + AlipaySystemOauthTokenResponse response = null; + try { + response = alipayClient.execute(request); + } catch (AlipayApiException e) { + throw new RuntimeException(e); + } + //刷新令牌,上次换取访问令牌时得到。见出参的refresh_token字段 + request.setRefreshToken(response.getAccessToken()); + + //返回成功时 就将唯一标识返回 + if (response.isSuccess()) { + System.out.println("调用成功"); + //我这里只返回了一个字段给前端用 + String user1= response.getUserId(); + appMiniLoginVo.setZfbuserid(response.getUserId()); + AlipayUserInfoShareResponse alipayUserInfoShareResponse=getAliUserInfo(response.getAccessToken()); + appMiniLoginVo.setPhone(alipayUserInfoShareResponse.getPhone()); + R<SysUser> sysUserR = sysUserClient.queryUserByPhone(alipayUserInfoShareResponse.getPhone()); + SysUser data = sysUserR.getData(); + appMiniLoginVo.setSysUser(data); + } + } + }else{ + WxMaJscode2SessionResult session = null; + String unionid; + String openid; + String sessionKey = null; + //获取session + session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode()); + if (session != null && StringUtils.isNotBlank(session.getOpenid())) { + unionid = session.getUnionid(); + openid = session.getOpenid(); + sessionKey = session.getSessionKey(); + + + String responseAccessToken = getAccessTokenByWX(); + + JSONObject jsonAccessToken = JSONObject.parseObject(responseAccessToken); + String accessToken = jsonAccessToken.getString("access_token"); + String errmsg = jsonAccessToken.getString("errmsg"); + Long expiresIn = jsonAccessToken.getLong("expires_in"); + if (StringUtils.isBlank(accessToken)) { + throw new ServiceException(errmsg); + } + String responseUserPhoneNumber = getMobileByWX(accessToken, appMiniLoginDto.getCode()); + JSONObject jsonUserPhoneNumber = JSONObject.parseObject(responseUserPhoneNumber); + + + String phoneInfo = jsonUserPhoneNumber.getString("phone_info"); + JSONObject jsonUserPhoneInfo = JSONObject.parseObject(phoneInfo); + String mobile = jsonUserPhoneInfo.getString("purePhoneNumber"); + //获取用户 + R<SysUser> sysUserR = sysUserClient.queryUserByPhone(mobile); + SysUser data = sysUserR.getData(); + appMiniLoginVo.setSysUser(data); + + appMiniLoginVo.setMiniOpenid(openid); + appMiniLoginVo.setWxUnionid(unionid); + appMiniLoginVo.setPhone(mobile); + appMiniLoginVo.setSessionKey(sessionKey); + } + } + return appMiniLoginVo; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + private AlipayUserInfoShareResponse getAliUserInfo (String accessToken) throws Exception { + + AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_BORDER_PROD,APP_ID_PROD, APP_PRIVATE_KEY, "json", "GBK", ALIPAY_PUBLIC_KEY, "RSA2"); + AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest(); + AlipayUserInfoShareResponse response = alipayClient.execute(request, accessToken); + if(response.isSuccess()){ + System.out.println("获取会员信息 - 调用成功"); + return response; + } + return null; + } + + + public static String getAccessTokenByWX() throws Exception { + String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential"; + Map<String, String> headers = new HashMap<>(8); + HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null); + return EntityUtils.toString(response.getEntity()); + } + + public static String getMobileByWX(String accessToken, String code) throws Exception { + Map<String, String> headers = new HashMap<>(16); + headers.put("Content-Type", "application/json"); + headers.put("Accept", "application/json"); + Map<String, String> querys = new HashMap<>(16); + Map<String, String> bodys = new HashMap<>(16); + querys.put("access_token", accessToken); + bodys.put("code", code); + String body = JSONObject.toJSONString(bodys); + String host = "https://api.weixin.qq.com/wxa/business/getuserphonenumber"; + HttpResponse response = HttpUtils.doPost(host, "", "POST", headers, querys, body); + return EntityUtils.toString(response.getEntity()); + } } diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/HttpUtils.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/HttpUtils.java new file mode 100644 index 0000000..da41cf7 --- /dev/null +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/util/HttpUtils.java @@ -0,0 +1,337 @@ +package com.ruoyi.auction.util; + +import com.ruoyi.common.core.utils.StringUtils; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.conn.ClientConnectionManager; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @ClassName HttpUtils + * @Description TODO + * @Author zhanglin + * @Date 2020/2/11 10:30 + * @Version 1.0 + **/ +public class HttpUtils { + + public static void main(String[] args) { + } + + + /** + * get + * + * @param host + * @return + * @throws Exception + */ + public static HttpResponse doGet(String host)throws Exception { + return doGet(host, "", "GET", null, null); + } + + /** + * get + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doGet(String host, String path, String method, Map<String, String> headers, Map<String, String> querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpGet request = new HttpGet(buildUrl(host, path, querys)); + if(null != headers) { + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + } + + return httpClient.execute(request); + } + + /** + * post form + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param bodys + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys, + Map<String, String> bodys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (bodys != null) { + List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>(); + + for (String key : bodys.keySet()) { + nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key))); + } + UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8"); + formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); + request.setEntity(formEntity); + } + + return httpClient.execute(request); + } + + /** + * Post String + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Post stream + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Put String + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Put stream + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Delete + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doDelete(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpDelete request = new HttpDelete(buildUrl(host, path, querys)); + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + return httpClient.execute(request); + } + + private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException { + StringBuilder sbUrl = new StringBuilder(); + sbUrl.append(host); + if (!StringUtils.isBlank(path)) { + sbUrl.append(path); + } + if (null != querys) { + StringBuilder sbQuery = new StringBuilder(); + for (Map.Entry<String, String> query : querys.entrySet()) { + if (0 < sbQuery.length()) { + sbQuery.append("&"); + } + if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { + sbQuery.append(query.getValue()); + } + if (!StringUtils.isBlank(query.getKey())) { + sbQuery.append(query.getKey()); + if (!StringUtils.isBlank(query.getValue())) { + sbQuery.append("="); + sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8")); + } + } + } + if (0 < sbQuery.length()) { + sbUrl.append("?").append(sbQuery); + } + } + + return sbUrl.toString(); + } + + private static HttpClient wrapClient(String host) { + HttpClient httpClient = new DefaultHttpClient(); + if (host.startsWith("https://")) { + sslClient(httpClient); + } + + return httpClient; + } + + private static void sslClient(HttpClient httpClient) { + try { + SSLContext ctx = SSLContext.getInstance("TLS"); + X509TrustManager tm = new X509TrustManager() { + @Override + public X509Certificate[] getAcceptedIssuers() { + return null; + } + @Override + public void checkClientTrusted(X509Certificate[] xcs, String str) { + + } + @Override + public void checkServerTrusted(X509Certificate[] xcs, String str) { + + } + }; + ctx.init(null, new TrustManager[] { tm }, null); + SSLSocketFactory ssf = new SSLSocketFactory(ctx); + ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + ClientConnectionManager ccm = httpClient.getConnectionManager(); + SchemeRegistry registry = ccm.getSchemeRegistry(); + registry.register(new Scheme("https", 443, ssf)); + } catch (KeyManagementException ex) { + throw new RuntimeException(ex); + } catch (NoSuchAlgorithmException ex) { + throw new RuntimeException(ex); + } + } +} diff --git a/ruoyi-modules/ruoyi-member/pom.xml b/ruoyi-modules/ruoyi-member/pom.xml index 7017810..4baf9d2 100644 --- a/ruoyi-modules/ruoyi-member/pom.xml +++ b/ruoyi-modules/ruoyi-member/pom.xml @@ -114,6 +114,12 @@ </dependency> <dependency> + <groupId>com.github.binarywang</groupId> + <artifactId>weixin-java-miniapp</artifactId> + <version>4.5.0</version> + </dependency> + + <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>3.4.27.ALL</version> diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/AlipayAppController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/AlipayAppController.java index 04ebaa7..30a0c2e 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/AlipayAppController.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/AlipayAppController.java @@ -6,7 +6,8 @@ import com.alipay.api.request.AlipaySystemOauthTokenRequest; import com.alipay.api.response.AlipaySystemOauthTokenResponse; import com.ruoyi.common.core.domain.R; -import com.ruoyi.member.VO.AlipayUser; +import com.ruoyi.system.api.domain.AppMiniLoginVO; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; import io.swagger.annotations.ApiOperation; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -45,11 +46,12 @@ @RequestMapping("/getalipayInfo") @ApiOperation(value = "获取支付宝授权码") - public R<AlipayUser> getInfo(String auth_code) throws AlipayApiException { + public R<AppMiniLoginVO> getInfo(AppMiniLoginDTO appMiniLoginDto) { //使用支付宝小程序的固定方法获取auth_code - if (auth_code == null || auth_code.length() == 0) { + if (appMiniLoginDto.getAuth_code()== null || appMiniLoginDto.getAuth_code().length() == 0) { return R.fail("请求参数auth_code不能为空"); } else { + AppMiniLoginVO user=new AppMiniLoginVO(); //String serverUrl, String appId, String privateKey, String format,String charset, String alipayPublicKey, String signType //实例化客户端 参数:正式环境URL,Appid,商户私钥 PKCS8格式,字符编码格式,字符格式,支付宝公钥,签名方式 AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_BORDER_PROD,APP_ID_PROD, APP_PRIVATE_KEY, "json", "GBK", ALIPAY_PUBLIC_KEY, "RSA2"); @@ -57,17 +59,22 @@ // 值为authorization_code时,代表用code换取 request.setGrantType("authorization_code"); //授权码,用户对应用授权后得到的 - request.setCode(auth_code); + request.setCode(appMiniLoginDto.getAuth_code()); //这里使用execute方法 - AlipaySystemOauthTokenResponse response = alipayClient.execute(request); + AlipaySystemOauthTokenResponse response = null; + try { + response = alipayClient.execute(request); + } catch (AlipayApiException e) { + throw new RuntimeException(e); + } //刷新令牌,上次换取访问令牌时得到。见出参的refresh_token字段 request.setRefreshToken(response.getAccessToken()); //返回成功时 就将唯一标识返回 if (response.isSuccess()) { System.out.println("调用成功"); //我这里只返回了一个字段给前端用 - AlipayUser user=new AlipayUser(); - user.setUserid(response.getUserId()); + String user1= response.getUserId(); + user.setZfbuserid(user1); return R.ok(user); } else { return R.fail("调用失败"); diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberAddressController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberAddressController.java index b0f8bba..4786b78 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberAddressController.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberAddressController.java @@ -71,14 +71,14 @@ @PostMapping("/getMemberAddressList") @ResponseBody @ApiOperation(value = "获取用户地址") - public R<PageDTO<MemberAddress>> getMemberAddressList(MemberAddressDTO memberAddressDTO) { + public R<PageDTO<MemberAddress>> getMemberAddressList(@RequestBody MemberAddressDTO memberAddressDTO) { return R.ok(iMemberAddressService.getMemberAddressList(memberAddressDTO)); } @PostMapping("/addMemberAddress") @ResponseBody @ApiOperation(value = "用户添加或者修改地址") - public R<T> addMemberAddress(MemberAddressDTO memberAddressDTO) { + public R<T> addMemberAddress(@RequestBody MemberAddressDTO memberAddressDTO) { iMemberAddressService.addMemberAddress(memberAddressDTO); return R.ok(); } @@ -86,7 +86,7 @@ @PostMapping("/delMemberAddress") @ResponseBody @ApiOperation(value = "用户删除地址") - public R<T> delMemberAddress(MemberAddressDTO memberAddressDTO) { + public R<T> delMemberAddress(@RequestBody MemberAddressDTO memberAddressDTO) { iMemberAddressService.delMemberAddress(memberAddressDTO); return R.ok(); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberController.java index 95610ad..fa41403 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberController.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberController.java @@ -5,15 +5,15 @@ import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.member.dto.MemberDTO; import com.ruoyi.member.service.IMemberService; +import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.Member; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; +import com.ruoyi.system.api.domain.dto.AppMiniRegisterDTO; import io.swagger.annotations.ApiOperation; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.apache.poi.ss.formula.functions.T; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import util.HuaWeiOBSUtil; @@ -41,17 +41,27 @@ } - @RequestMapping("/loginThird") + @RequestMapping("/miniLogin") @ResponseBody - @ApiOperation(value = "第三方登陸和註冊") - public R<Member> loginThird(MemberDTO memberDTO) { - return R.ok(iMemberService.loginThird(memberDTO)); + @ApiOperation(value = "第三方登陸") + public R<AppMiniLoginVO> loginThird(@RequestBody AppMiniLoginDTO appMiniLoginDto) { + return R.ok(iMemberService.loginThird(appMiniLoginDto)); + } + + @PostMapping(value = "/miniRegister") + @ApiOperation(value = "小程序注册") + public R<AppMiniLoginVO> miniRegister(@RequestBody AppMiniRegisterDTO appMiniRegisterDTO) { + AppMiniLoginVO appUserRegisterVo = iMemberService.miniRegister(appMiniRegisterDTO); + if(appUserRegisterVo ==null){ + return R.fail("注册失败!"); + } + return R.ok(appUserRegisterVo); } @RequestMapping("/getMembeid") @ResponseBody @ApiOperation(value = "获取用户信息") - public R<Member> getMembeid(MemberDTO memberDTO) { + public R<Member> getMembeid(@RequestBody MemberDTO memberDTO) { return R.ok(iMemberService.getMembeid(memberDTO)); } @@ -75,7 +85,7 @@ @RequestMapping("/updateMembeid") @ResponseBody @ApiOperation(value = "修改用户信息") - public R<T> updateMembeid(MemberDTO memberDTO) { + public R<T> updateMembeid(@RequestBody MemberDTO memberDTO) { iMemberService.updateMembeid(memberDTO); return R.ok(); } @@ -83,7 +93,7 @@ @RequestMapping("/authentificationMembe") @ResponseBody @ApiOperation(value = "用户认证") - public R<T> authentificationMembe(MemberDTO memberDTO) { + public R<T> authentificationMembe(@RequestBody MemberDTO memberDTO) { iMemberService.authentificationMembe(memberDTO); return R.ok(); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java index 8a29a40..5206024 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java @@ -8,6 +8,8 @@ import com.ruoyi.member.service.IMemberPointsService; import io.swagger.annotations.ApiOperation; import javax.annotation.Resource; + +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @@ -28,7 +30,7 @@ @RequestMapping("/getMemberPoints") @ResponseBody @ApiOperation(value = "获取用户积分") - public R<PageDTO<MemberPoints>> getMemberPoints(MemberDTO memberDTO) { + public R<PageDTO<MemberPoints>> getMemberPoints(@RequestBody MemberDTO memberDTO) { return R.ok(iMemberPointsService.getMemberPoints(memberDTO)); } } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/WeiXinAppController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/WeiXinAppController.java index c4d07eb..c1dda36 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/WeiXinAppController.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/WeiXinAppController.java @@ -1,3 +1,4 @@ +/* package com.ruoyi.member.controller; import java.io.BufferedReader; @@ -14,39 +15,50 @@ import java.util.HashMap; import java.util.Map; +import javax.annotation.Resource; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import javax.servlet.http.HttpServletRequest; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.sign.Base64; +import com.ruoyi.system.api.domain.AppMiniLoginVO; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; import com.ruoyi.member.util.*; import io.swagger.annotations.ApiOperation; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.alibaba.fastjson.JSONObject; -import net.sf.json.JSON; - import org.bouncycastle.jce.provider.BouncyCastleProvider; +*/ /** * 微信授权方面 * * @author tuzx * @date 2018年8月9日 * @version 1.0 - */ + *//* + @Controller @RequestMapping("/weixin") public class WeiXinAppController { private static String appid = "wx0e4769839d84fde0"; private static String appSecret = "ede69db0303ddde49b5db95f186918ec"; + + @Resource + private WxMaService wxMaService; @RequestMapping("/getAddress") @ResponseBody @@ -67,18 +79,36 @@ } @ResponseBody - @RequestMapping("/getOpenId") - @ApiOperation(value = "获取微信的OpenId") - public R<Map<String, String>> getOpenId(String code) { + @PostMapping("/miniLogin") + @ApiOperation("小程序登录") + public R<AppMiniLoginVO> getMemberByCode(@RequestBody AppMiniLoginDTO appMiniLoginDto) + { + AppMiniLoginVO appMiniLoginVo = new AppMiniLoginVO(); + WxMaJscode2SessionResult session = null; + String unionid; + String openid; + String sessionKey = null; + //获取session try { - String openID = JsapiTicketUtil.getOpenId(code); - Map<String,String> data=new HashMap<>(); - data.put("openID",openID); - return R.ok(data); + session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode()); } catch (Exception e) { e.printStackTrace(); + return null; } - return R.fail("获取异常"); + if (session != null && StringUtils.isNotBlank(session.getOpenid())) { + unionid = session.getUnionid(); + openid = session.getOpenid(); + sessionKey = session.getSessionKey(); + + appMiniLoginVo.setMiniOpenid(openid); + appMiniLoginVo.setWxUnionid(unionid); + appMiniLoginVo.setSessionKey(sessionKey); + } + + if(appMiniLoginVo ==null){ + return R.fail("登录失败!"); + } + return R.ok(appMiniLoginVo); } @ResponseBody @@ -150,13 +180,15 @@ return R.fail("获取异常"); } - /** + */ +/** * 获取微信用户信息 * * @param token * @param openid * @return - */ + *//* + @ResponseBody @RequestMapping("/getWXinfo") @ApiOperation(value = "获取微信用户信息") @@ -184,11 +216,14 @@ } - /** + */ +/** * 小程序使用jscode获取openid * @param jscode * @return *//* +*/ +/* public String code2Session(String jscode){ String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + appSecret + "&js_code=" + jscode + "&grant_type=authorization_code"; @@ -208,16 +243,19 @@ return jsonObject.getString("errmsg"); } return null; - }*/ + }*//* - /*** + + */ +/*** * 模拟get请求 * * @param url * @param charset * @param timeout * @return - */ + *//* + public static String sendGet(String url, String charset, int timeout) { String result = ""; try { @@ -309,3 +347,4 @@ return null; } } +*/ diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberService.java index 1730c9e..3df8131 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberService.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberService.java @@ -1,8 +1,14 @@ package com.ruoyi.member.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.domain.R; import com.ruoyi.member.dto.MemberDTO; +import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.Member; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; +import com.ruoyi.system.api.domain.dto.AppMiniRegisterDTO; +import org.springframework.web.bind.annotation.RequestBody; + import java.util.List; import java.util.Set; @@ -16,7 +22,7 @@ */ public interface IMemberService extends IService<Member> { - Member loginThird(MemberDTO memberDTO); + AppMiniLoginVO loginThird(AppMiniLoginDTO appMiniLoginDto); Member getMembeid(MemberDTO memberDTO); @@ -25,4 +31,6 @@ void authentificationMembe(MemberDTO memberDTO); List<Member> getMemberListByIds(Set<Long> memberIdList); + + AppMiniLoginVO miniRegister(@RequestBody AppMiniRegisterDTO appMiniRegisterDTO); } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java index ea5ac76..0abeed2 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java @@ -1,27 +1,45 @@ package com.ruoyi.member.service.impl; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipaySystemOauthTokenRequest; +import com.alipay.api.response.AlipaySystemOauthTokenResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.enums.GenderEnum; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.uuid.IdUtils; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.member.dto.MemberDTO; import com.ruoyi.member.mapper.MemberMapper; import com.ruoyi.member.service.IMemberService; +import com.ruoyi.member.util.HttpUtils; +import com.ruoyi.system.api.RemoteUserService; +import com.ruoyi.system.api.constants.SecurityConstant; +import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.Member; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.concurrent.TimeUnit; import javax.annotation.Resource; + +import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; +import com.ruoyi.system.api.domain.dto.AppMiniRegisterDTO; import org.apache.commons.io.IOUtils; import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; @@ -49,52 +67,137 @@ public static String query_url = "http://op.juhe.cn/idcard/query?key=" + APPKEY; + //微信 + private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token"; + + private static final String WX_APPID = "wxb7f0ea286fc4e535"; + + private static final String WX_SECRET = "852a2512a6ab559cafc68bae5d4160ac"; + + //支付寶 + /** + * Alipay客户端 + */ + private AlipayClient alipayClient; + + /**支付宝网关*/ + /** + * 沙箱的 + */ + private static final String ALIPAY_BORDER_DEV = "https://openapi-sandbox.dl.alipaydev.com/gateway.do"; + /** + * 个人用户的 + */ + private static final String ALIPAY_BORDER_PROD = "https://openapi.alipay.com/gateway.do"; + /** + * appID + **/ + private static final String APP_ID_PROD = "2021003196653501"; + /** + * 私钥 + */ + private static final String APP_PRIVATE_KEY = ""; + /** + * 支付宝公钥 + */ + private static final String ALIPAY_PUBLIC_KEY = ""; + + + @Resource private IMemberService iMemberService; + + @Resource + private WxMaService wxMaService; + + @Resource + private RemoteUserService sysUserService; + + @Resource + private RedisService redisService; + @Override - public Member loginThird(MemberDTO memberDTO) { - try { - if (memberDTO.getType() == 1) { - LambdaQueryWrapper<Member> wrapper= Wrappers.lambdaQuery(); - wrapper.eq(Member::getZfbOpenid,memberDTO.getOpenid()); - Member member=iMemberService.getOne(wrapper); - if (member==null){ - Member m=new Member(); - m.setZfbOpenid(memberDTO.getOpenid()); - m.setNickname("未知"); - m.setLevel(0); - m.setAvatar(""); - iMemberService.save(m); - return m; - }else { + public AppMiniLoginVO loginThird(AppMiniLoginDTO appMiniLoginDto) { + AppMiniLoginVO appMiniLoginVo = new AppMiniLoginVO(); - return member; + if(appMiniLoginDto.getType()==1){ + if (appMiniLoginDto.getAuth_code()== null || appMiniLoginDto.getAuth_code().length() == 0) { + } else { + AppMiniLoginVO user=new AppMiniLoginVO(); + //String serverUrl, String appId, String privateKey, String format,String charset, String alipayPublicKey, String signType + //实例化客户端 参数:正式环境URL,Appid,商户私钥 PKCS8格式,字符编码格式,字符格式,支付宝公钥,签名方式 + AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_BORDER_PROD,APP_ID_PROD, APP_PRIVATE_KEY, "json", "GBK", ALIPAY_PUBLIC_KEY, "RSA2"); + AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); + // 值为authorization_code时,代表用code换取 + request.setGrantType("authorization_code"); + //授权码,用户对应用授权后得到的 + request.setCode(appMiniLoginDto.getAuth_code()); + //这里使用execute方法 + AlipaySystemOauthTokenResponse response = null; + try { + response = alipayClient.execute(request); + } catch (AlipayApiException e) { + throw new RuntimeException(e); } + //刷新令牌,上次换取访问令牌时得到。见出参的refresh_token字段 + request.setRefreshToken(response.getAccessToken()); + //返回成功时 就将唯一标识返回 + if (response.isSuccess()) { + System.out.println("调用成功"); + //我这里只返回了一个字段给前端用 + String user1= response.getUserId(); - } - if (memberDTO.getType() == 2) { - LambdaQueryWrapper<Member> wrapper= Wrappers.lambdaQuery(); - wrapper.eq(Member::getWxOpenid,memberDTO.getOpenid()); - Member member=iMemberService.getOne(wrapper); - if (member==null){ - Member m=new Member(); - m.setZfbOpenid(memberDTO.getOpenid()); - m.setNickname("未知"); - m.setLevel(0); - m.setAvatar(""); - iMemberService.save(m); - return m; - }else { - - return member; + LambdaQueryWrapper<Member> wrapper= Wrappers.lambdaQuery(); + wrapper.eq(Member::getZfbOpenid,response.getUserId()); + Member member=iMemberService.getOne(wrapper); + SysUser sysUser = null; + if (member != null) { + sysUser = sysUserService.getSysUser(member.getUserId()).getData(); + } + appMiniLoginVo.setZfbuserid(response.getUserId()); + appMiniLoginVo.setSysUser(sysUser); + appMiniLoginVo.setMemberid(member.getId()); + redisService.setCacheObject(SecurityConstant.SESSION_KEY + response.getUserId(), null, 1L, TimeUnit.DAYS); } } - } catch (Exception e) { - e.printStackTrace(); - + }else{ + WxMaJscode2SessionResult session = null; + String unionid; + String openid; + String sessionKey = null; + //获取session + try { + session = wxMaService.getUserService().getSessionInfo(appMiniLoginDto.getCode()); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + if (session != null && StringUtils.isNotBlank(session.getOpenid())) { + unionid = session.getUnionid(); + openid = session.getOpenid(); + sessionKey = session.getSessionKey(); + //获取用户 + LambdaQueryWrapper<Member> wrapper= Wrappers.lambdaQuery(); + wrapper.eq(Member::getZfbOpenid,session.getOpenid()); + Member member=iMemberService.getOne(wrapper); + SysUser sysUser = null; + if (member != null) { + sysUser = sysUserService.getSysUser(member.getUserId()).getData(); + } + appMiniLoginVo.setMiniOpenid(openid); + appMiniLoginVo.setWxUnionid(unionid); + appMiniLoginVo.setMemberid(member.getId()); + appMiniLoginVo.setSysUser(sysUser); + appMiniLoginVo.setSessionKey(sessionKey); + redisService.setCacheObject(SecurityConstant.SESSION_KEY + openid, sessionKey, 1L, TimeUnit.DAYS); + } } - return null; + + return appMiniLoginVo; } + + + @Override public Member getMembeid(MemberDTO memberDTO) { @@ -194,6 +297,119 @@ public List<Member> getMemberListByIds(Set<Long> memberIdList) { return this.listByIds(memberIdList); } + + @Override + public AppMiniLoginVO miniRegister(AppMiniRegisterDTO appMiniRegisterDTO) { + AppMiniLoginVO appMiniLoginVO =new AppMiniLoginVO(); + SysUser sysUser; + if (appMiniRegisterDTO.getType() == 1) { + LambdaQueryWrapper<Member> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(Member::getZfbOpenid, appMiniRegisterDTO.getZfbuserid()); + Member member = iMemberService.getOne(wrapper); + + //获取用户为空则新建 + if (member == null) { + //创建新用户 + String memberId = IdUtils.simpleUUID(); + sysUser = new SysUser(); + sysUser.setUserName(memberId); + sysUser.setUserType("03"); + sysUser.setNickName("白金用户"); + sysUser.setPhonenumber(appMiniRegisterDTO.getMiniOpenid()); + sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + String password = "123456"; + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + sysUser = sysUserService.registerUser(sysUser).getData(); + + member = new Member(); + member.setUserId(sysUser.getUserId()); + member.setDelFlag(0); + member.setRealName("白酒用户"); + member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + member.setWxUnionid(appMiniRegisterDTO.getWxUnionid()); + member.setMiniOpenid(appMiniRegisterDTO.getMiniOpenid()); + iMemberService.save(member); + + appMiniLoginVO.setMiniOpenid(member.getMiniOpenid()); + appMiniLoginVO.setWxUnionid(member.getWxUnionid()); + appMiniLoginVO.setSysUser(sysUser); + appMiniLoginVO.setMemberid(member.getId()); + } else { + sysUser = sysUserService.getSysUser(member.getUserId()).getData(); + appMiniLoginVO.setZfbuserid( appMiniRegisterDTO.getZfbuserid()); + appMiniLoginVO.setSysUser(sysUser); + appMiniLoginVO.setMemberid(member.getId()); + } + + } + if (appMiniRegisterDTO.getType() == 2) { + LambdaQueryWrapper<Member> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(Member::getMiniOpenid, appMiniRegisterDTO.getMiniOpenid()); + Member member = iMemberService.getOne(wrapper); + //获取用户为空则新建 + if (member == null) { + //创建新用户 + String memberId = IdUtils.simpleUUID(); + sysUser = new SysUser(); + sysUser.setUserName(memberId); + sysUser.setUserType("03"); + sysUser.setNickName("白金用户"); + sysUser.setPhonenumber(appMiniRegisterDTO.getMiniOpenid()); + sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + String password = "123456"; + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + sysUser = sysUserService.registerUser(sysUser).getData(); + + member = new Member(); + member.setUserId(sysUser.getUserId()); + member.setDelFlag(0); + member.setRealName("白酒用户"); + member.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); + member.setWxUnionid(appMiniRegisterDTO.getWxUnionid()); + member.setMiniOpenid(appMiniRegisterDTO.getMiniOpenid()); + iMemberService.save(member); + + appMiniLoginVO.setMiniOpenid(member.getMiniOpenid()); + appMiniLoginVO.setWxUnionid(member.getWxUnionid()); + appMiniLoginVO.setSysUser(sysUser); + appMiniLoginVO.setMemberid(member.getId()); + } else { + sysUser = sysUserService.getSysUser(member.getUserId()).getData(); + appMiniLoginVO.setMiniOpenid(member.getMiniOpenid()); + appMiniLoginVO.setWxUnionid(member.getWxUnionid()); + appMiniLoginVO.setSysUser(sysUser); + appMiniLoginVO.setMemberid(member.getId()); + } + + + + + } + return appMiniLoginVO; + + } + + public static String getAccessTokenByWX() throws Exception { + String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential"; + Map<String, String> headers = new HashMap<>(8); + HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null); + return EntityUtils.toString(response.getEntity()); + } + + public static String getMobileByWX(String accessToken, String code) throws Exception { + Map<String, String> headers = new HashMap<>(16); + headers.put("Content-Type", "application/json"); + headers.put("Accept", "application/json"); + Map<String, String> querys = new HashMap<>(16); + Map<String, String> bodys = new HashMap<>(16); + querys.put("access_token", accessToken); + bodys.put("code", code); + String body = JSONObject.toJSONString(bodys); + String host = "https://api.weixin.qq.com/wxa/business/getuserphonenumber"; + HttpResponse response = HttpUtils.doPost(host, "", "POST", headers, querys, body); + return EntityUtils.toString(response.getEntity()); + } + } diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/util/HttpUtils.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/util/HttpUtils.java new file mode 100644 index 0000000..1c13a20 --- /dev/null +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/util/HttpUtils.java @@ -0,0 +1,337 @@ +package com.ruoyi.member.util; + +import com.ruoyi.common.core.utils.StringUtils; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.conn.ClientConnectionManager; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @ClassName HttpUtils + * @Description TODO + * @Author zhanglin + * @Date 2020/2/11 10:30 + * @Version 1.0 + **/ +public class HttpUtils { + + public static void main(String[] args) { + } + + + /** + * get + * + * @param host + * @return + * @throws Exception + */ + public static HttpResponse doGet(String host)throws Exception { + return doGet(host, "", "GET", null, null); + } + + /** + * get + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doGet(String host, String path, String method, Map<String, String> headers, Map<String, String> querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpGet request = new HttpGet(buildUrl(host, path, querys)); + if(null != headers) { + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + } + + return httpClient.execute(request); + } + + /** + * post form + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param bodys + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys, + Map<String, String> bodys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (bodys != null) { + List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>(); + + for (String key : bodys.keySet()) { + nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key))); + } + UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8"); + formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); + request.setEntity(formEntity); + } + + return httpClient.execute(request); + } + + /** + * Post String + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Post stream + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Put String + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Put stream + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Delete + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doDelete(String host, String path, String method, + Map<String, String> headers, + Map<String, String> querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpDelete request = new HttpDelete(buildUrl(host, path, querys)); + for (Map.Entry<String, String> e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + return httpClient.execute(request); + } + + private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException { + StringBuilder sbUrl = new StringBuilder(); + sbUrl.append(host); + if (!StringUtils.isBlank(path)) { + sbUrl.append(path); + } + if (null != querys) { + StringBuilder sbQuery = new StringBuilder(); + for (Map.Entry<String, String> query : querys.entrySet()) { + if (0 < sbQuery.length()) { + sbQuery.append("&"); + } + if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { + sbQuery.append(query.getValue()); + } + if (!StringUtils.isBlank(query.getKey())) { + sbQuery.append(query.getKey()); + if (!StringUtils.isBlank(query.getValue())) { + sbQuery.append("="); + sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8")); + } + } + } + if (0 < sbQuery.length()) { + sbUrl.append("?").append(sbQuery); + } + } + + return sbUrl.toString(); + } + + private static HttpClient wrapClient(String host) { + HttpClient httpClient = new DefaultHttpClient(); + if (host.startsWith("https://")) { + sslClient(httpClient); + } + + return httpClient; + } + + private static void sslClient(HttpClient httpClient) { + try { + SSLContext ctx = SSLContext.getInstance("TLS"); + X509TrustManager tm = new X509TrustManager() { + @Override + public X509Certificate[] getAcceptedIssuers() { + return null; + } + @Override + public void checkClientTrusted(X509Certificate[] xcs, String str) { + + } + @Override + public void checkServerTrusted(X509Certificate[] xcs, String str) { + + } + }; + ctx.init(null, new TrustManager[] { tm }, null); + SSLSocketFactory ssf = new SSLSocketFactory(ctx); + ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + ClientConnectionManager ccm = httpClient.getConnectionManager(); + SchemeRegistry registry = ccm.getSchemeRegistry(); + registry.register(new Scheme("https", 443, ssf)); + } catch (KeyManagementException ex) { + throw new RuntimeException(ex); + } catch (NoSuchAlgorithmException ex) { + throw new RuntimeException(ex); + } + } +} diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceController.java index 9031034..6fdee2d 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceController.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceController.java @@ -8,11 +8,7 @@ import com.ruoyi.order.service.IMemberInvoiceService; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.formula.functions.T; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @@ -34,7 +30,7 @@ @PostMapping("/saveMemberInvoice") @ResponseBody @ApiOperation(value = "用户添加发票") - public R<T> saveMemberInvoice(MemberInvoiceDTO memberInvoiceDTO) { + public R<T> saveMemberInvoice(@RequestBody MemberInvoiceDTO memberInvoiceDTO) { iMemberInvoiceService.saveMemberInvoice(memberInvoiceDTO); return R.ok(); } @@ -42,7 +38,7 @@ @PostMapping("/getMemberInvoiceList") @ResponseBody @ApiOperation(value = "获取用户开票历史") - public R<PageDTO<MemberInvoice>> getMemberInvoiceList(MemberInvoiceDTO memberInvoiceDTO) { + public R<PageDTO<MemberInvoice>> getMemberInvoiceList(@RequestBody MemberInvoiceDTO memberInvoiceDTO) { return R.ok(iMemberInvoiceService.getMemberInvoiceList(memberInvoiceDTO)); } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceOrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceOrderController.java index 589ff75..8b96e7c 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceOrderController.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceOrderController.java @@ -10,11 +10,7 @@ import com.ruoyi.order.dto.MemberInvoiceRiseDTO; import com.ruoyi.order.service.IMemberInvoiceOrderService; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @@ -36,7 +32,7 @@ @PostMapping("/getMemberInvoiceInfo") @ResponseBody @ApiOperation(value = "获取用户开票历史详情") - public R<PageDTO<MemberInvoiceOrder>> getMemberInvoiceInfo(MemberInvoiceDTO memberInvoiceDTO) { + public R<PageDTO<MemberInvoiceOrder>> getMemberInvoiceInfo(@RequestBody MemberInvoiceDTO memberInvoiceDTO) { return R.ok(iMemberInvoiceOrderService.getMemberInvoiceInfo(memberInvoiceDTO)); } } diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceRiseController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceRiseController.java index bd15109..f64c481 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceRiseController.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceRiseController.java @@ -11,10 +11,7 @@ import io.swagger.annotations.ApiOperation; import javax.annotation.Resource; import org.apache.poi.ss.formula.functions.T; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * <p> @@ -37,14 +34,14 @@ @PostMapping("/getMemberInvoiceRiseList") @ResponseBody @ApiOperation(value = "获取用户发票抬头") - public R<PageDTO<MemberInvoiceRise>> getMemberInvoiceRiseList(MemberInvoiceRiseDTO memberInvoiceRiseDTO) { + public R<PageDTO<MemberInvoiceRise>> getMemberInvoiceRiseList(@RequestBody MemberInvoiceRiseDTO memberInvoiceRiseDTO) { return R.ok(iMemberInvoiceRiseService.getMemberInvoiceRiseList(memberInvoiceRiseDTO)); } @PostMapping("/saveMemberInvoiceRise") @ResponseBody @ApiOperation(value = "添加编辑用户发票抬头") - public R<T> saveMemberInvoiceRise(MemberInvoiceRiseDTO memberInvoiceRiseDTO) { + public R<T> saveMemberInvoiceRise(@RequestBody MemberInvoiceRiseDTO memberInvoiceRiseDTO) { iMemberInvoiceRiseService.saveMemberInvoiceRise(memberInvoiceRiseDTO); return R.ok(); } @@ -52,7 +49,7 @@ @PostMapping("/saveIsDefault") @ResponseBody @ApiOperation(value = "设置默认") - public R<T> saveIsDefault(MemberInvoiceRiseDTO memberInvoiceRiseDTO) { + public R<T> saveIsDefault(@RequestBody MemberInvoiceRiseDTO memberInvoiceRiseDTO) { iMemberInvoiceRiseService.saveIsDefault(memberInvoiceRiseDTO); return R.ok(); } @@ -60,7 +57,7 @@ @PostMapping("/delMemberInvoiceRise") @ResponseBody @ApiOperation(value = "删除用户发票抬头") - public R<T> delMemberInvoiceRise(MemberInvoiceRiseDTO memberInvoiceRiseDTO) { + public R<T> delMemberInvoiceRise(@RequestBody MemberInvoiceRiseDTO memberInvoiceRiseDTO) { iMemberInvoiceRiseService.delMemberInvoiceRise(memberInvoiceRiseDTO); return R.ok(); } diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/CouponMemberController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/CouponMemberController.java index c2d7bc5..73574bf 100644 --- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/CouponMemberController.java +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/CouponMemberController.java @@ -7,11 +7,7 @@ import com.ruoyi.promotion.domain.pojo.CouponMember; import com.ruoyi.promotion.service.ICouponMemberService; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @@ -34,7 +30,7 @@ @PostMapping("/getCouponMemberList") @ResponseBody @ApiOperation(value = "获取用户优惠卷") - public R<PageDTO<CouponMember>> getCouponMemberList(CouponMemberDTO couponMemberDTO) { + public R<PageDTO<CouponMember>> getCouponMemberList(@RequestBody CouponMemberDTO couponMemberDTO) { return R.ok(iCouponMemberService.getCouponMemberList(couponMemberDTO)); } diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/PromotionWishListController.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/PromotionWishListController.java index 9155fb1..053a941 100644 --- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/PromotionWishListController.java +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/PromotionWishListController.java @@ -9,11 +9,7 @@ import com.ruoyi.promotion.service.IPromotionWishListService; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.formula.functions.T; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @@ -34,14 +30,14 @@ @RequestMapping("/getPromotionWishList") @ResponseBody @ApiOperation(value = "获取心愿单列表") - public R<PageDTO<PromotionWishList>> getPromotionWishList(PromotionWishListDTO promotionWishListDTO) { + public R<PageDTO<PromotionWishList>> getPromotionWishList(@RequestBody PromotionWishListDTO promotionWishListDTO) { return R.ok(iPromotionWishListService.getPromotionWishList(promotionWishListDTO)); } @RequestMapping("/savePromotionWishList") @ResponseBody @ApiOperation(value = "添加心愿单列表") - public R<T> savePromotionWishList(PromotionWishListDTO promotionWishListDTO) { + public R<T> savePromotionWishList(@RequestBody PromotionWishListDTO promotionWishListDTO) { iPromotionWishListService.savePromotionWishList(promotionWishListDTO); return R.ok(); } @@ -49,14 +45,14 @@ @RequestMapping("/getPromotionWishOne") @ResponseBody @ApiOperation(value = "获取心愿单个") - public R<PromotionWishList> getPromotionWishOne(PromotionWishListDTO promotionWishListDTO) { + public R<PromotionWishList> getPromotionWishOne(@RequestBody PromotionWishListDTO promotionWishListDTO) { return R.ok(iPromotionWishListService.getPromotionWishOne(promotionWishListDTO)); } @RequestMapping("/delPromotionWishOne") @ResponseBody @ApiOperation(value = "删除心愿单个") - public R<T> delPromotionWishOne(PromotionWishListDTO promotionWishListDTO) { + public R<T> delPromotionWishOne(@RequestBody PromotionWishListDTO promotionWishListDTO) { iPromotionWishListService.delPromotionWishOne(promotionWishListDTO); return R.ok(); } -- Gitblit v1.7.1