guns-admin/pom.xml
@@ -16,22 +16,27 @@ <packaging>jar</packaging> <dependencies> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20210307</version> <!-- Replace with the latest version --> </dependency> <dependency> <groupId>com.huaweicloud</groupId> <artifactId>esdk-obs-java-bundle</artifactId> <version>3.23.9</version> </dependency> <!-- <dependency>--> <!-- <groupId>com.huaweicloud.sdk</groupId>--> <!-- <artifactId>huaweicloud-sdk-iam</artifactId>--> <!-- <version>3.1.88</version>--> <!-- </dependency>--> <!-- <dependency>--> <!-- <groupId>com.huaweicloud.sdk</groupId>--> <!-- <artifactId>huaweicloud-sdk-moderation</artifactId>--> <!-- <version>3.1.87</version>--> <!-- </dependency>--> <dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-bundle</artifactId> @@ -44,7 +49,6 @@ <scope>system</scope> <systemPath>${project.basedir}/lib/java-sdk-core-3.2.5.jar</systemPath> </dependency> <dependency> <groupId>org.mindrot</groupId> <artifactId>jbcrypt</artifactId> @@ -295,6 +299,12 @@ <artifactId>emoji-java</artifactId> <version>5.1.1</version> </dependency> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.4.0</version> <scope>compile</scope> </dependency> </dependencies> guns-admin/src/main/java/com/stylefeng/guns/modular/api/AppUserController.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.huaweicloud.sdk.core.exception.SdkErrorMessage; import com.stylefeng.guns.core.shiro.ShiroKit; import com.stylefeng.guns.core.util.JwtTokenUtil; import com.stylefeng.guns.core.util.MD5Util; import com.stylefeng.guns.core.util.ToolUtil; @@ -82,8 +83,12 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), }) public ResultUtil isFirst() { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Login userId = loginService.selectOne(new EntityWrapper<Login>() .eq("userId", appUserService.getAppUser().getId())); .eq("userId", appUser.getId())); if (userId == null){ // 首次登录 Login login = new Login(); @@ -108,6 +113,9 @@ public ResultUtil<String> updatePassword(String password, String newPassword,String code) { try { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } if (null == appUser) { return ResultUtil.error("请先登录!", ""); } @@ -177,15 +185,25 @@ // 首次注册默认头像 appUser1.setHeadImg("https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/admin/8d9bb8b7fb9a4786a50b88863c7706ab.png"); // appUser1.setConstellation(zodiacSign); appUser1.setName(addAppUserVo.getPhone()); appUser1.setAccount(addAppUserVo.getPhone()); appUser1.setCode(UUIDUtil.getRandomCode(6).toUpperCase()); appUser1.setName("用户-"+appUser1.getCode()); appUser1.setHeight(155); appUser1.setWeight(130D); appUser1.setWaistline(100); appUser1.setGender(1); // 获取当前时间 Calendar calendar = Calendar.getInstance(); // 将当前时间向前推30年 calendar.add(Calendar.YEAR, -30); Date date30YearsAgo = calendar.getTime(); appUser1.setBirthday(date30YearsAgo); // 根据邀请码 查询到用户 if (StringUtils.hasLength(addAppUserVo.getInvitationCode())){ AppUser code = appUserService.selectOne(new EntityWrapper<AppUser>() .eq("code", addAppUserVo.getInvitationCode())); if (code==null){ return ResultUtil.errorInvite("邀请码无效",null); return ResultUtil.errorInvite("邀请码无效",""); } appUser1.setInviteUserId(code.getId()); } @@ -205,10 +223,10 @@ // 判断当前手机号 登陆了哪些设备 List<DeviceLogin> deviceLogins = deviceLoginService.selectList(queryWrapper); List<String> collect = deviceLogins.stream().map(DeviceLogin::getDevice).collect(Collectors.toList()); if (collect.size()>=5 &&!collect.contains(addAppUserVo.getCode2())){ // 是一个新的设备登录 返回登陆失败的提示 return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null); } // if (collect.size()>=5 &&!collect.contains(addAppUserVo.getCode2())){ // // 是一个新的设备登录 返回登陆失败的提示 // return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null); // } DeviceLogin deviceLogin1 = deviceLoginService.selectOne(new EntityWrapper<DeviceLogin>() .eq("device", addAppUserVo.getCode2()) .eq("userId", appUser1.getId())); @@ -257,15 +275,27 @@ return ResultUtil.errorLogin("登录失败,您的账号已被冻结!",null); } if (StringUtils.hasLength(invitationCode)){ if (tAppUser.getCode().equals(invitationCode)){ return ResultUtil.error("不能绑定自己",""); } if (tAppUser.getInviteUserId()!=null){ ResultUtil.error("ss"); // 登陆失败 return ResultUtil.errorLogin("登录失败,已绑定其他用户",null); return ResultUtil.error("该手机号已绑定其他邀请码",null); }else{ // 根据邀请码 去查询用户 AppUser code3 = appUserService.selectOne(new EntityWrapper<AppUser>() .eq("code", invitationCode)); if (code3!=null){ if (code3.getInviteUserId().equals(tAppUser.getId())){ return ResultUtil.error("邀请失败,当前邀请用户为您的邀请人", null); } } // 根据邀请码 去查询用户 if (code3 == null){ return ResultUtil.errorInvite("邀请码无效",null); return ResultUtil.errorInvite("邀请码无效",""); }else{ tAppUser.setInviteUserId(code3.getId()); appUserService.updateById(tAppUser); @@ -281,11 +311,11 @@ // 判断当前手机号 登陆了哪些设备 List<DeviceLogin> deviceLogins = deviceLoginService.selectList(queryWrapper); List<String> collect = deviceLogins.stream().map(DeviceLogin::getDevice).collect(Collectors.toList()); if (collect.size()>=5 &&!collect.contains(code2)){ // 是一个新的设备登录 返回登陆失败的提示 return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null); } // // if (collect.size()>=5 &&!collect.contains(code2)){ // // 是一个新的设备登录 返回登陆失败的提示 // return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null); // } DeviceLogin deviceLogin1 = deviceLoginService.selectOne(new EntityWrapper<DeviceLogin>() .eq("device", code2) .eq("userId", tAppUser.getId())); @@ -347,7 +377,10 @@ } } public static void main(String[] args) { String s = ShiroKit.md5("123456", "SA;d5#"); System.err.println(s); } @ResponseBody @PostMapping("/base/appUser/loginWeChat") @ApiOperation(value = "微信登录", tags = {"APP-登录注册"}) @@ -364,11 +397,21 @@ tAppUser.setOpenId(loginWeChatVo.getOpenId()); tAppUser.setPhone(loginWeChatVo.getPhone()); tAppUser.setPassword(Md5Util.MD5Encode("111111", null)); tAppUser.setName(loginWeChatVo.getNickname()); tAppUser.setName("用户-"+s); tAppUser.setHeadImg(loginWeChatVo.getHeadimgurl()); tAppUser.setGender(loginWeChatVo.getSex()); tAppUser.setState(1); tAppUser.setHeadImg("https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/admin/8d9bb8b7fb9a4786a50b88863c7706ab.png"); tAppUser.setHeight(155); tAppUser.setWeight(130D); tAppUser.setWaistline(100); tAppUser.setGender(1); // 获取当前时间 Calendar calendar = Calendar.getInstance(); // 将当前时间向前推30年 calendar.add(Calendar.YEAR, -30); Date date30YearsAgo = calendar.getTime(); tAppUser.setBirthday(date30YearsAgo); // 获取当前日期 LocalDate currentDate = LocalDate.now(); int month = currentDate.getMonthValue(); @@ -399,12 +442,12 @@ // 判断当前手机号 登陆了哪些设备 List<DeviceLogin> deviceLogins = deviceLoginService.selectList(queryWrapper); List<String> collect = deviceLogins.stream().map(DeviceLogin::getDevice).collect(Collectors.toList()); if (collect.size()>5){ if (!collect.contains(loginWeChatVo.getCode2())){ // 是一个新的设备登录 返回登陆失败的提示 return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null); } } // if (collect.size()>5){ // if (!collect.contains(loginWeChatVo.getCode2())){ // // 是一个新的设备登录 返回登陆失败的提示 // return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null); // } // } DeviceLogin deviceLogin1 = deviceLoginService.selectOne(new EntityWrapper<DeviceLogin>() .eq("device", loginWeChatVo.getCode2()) .eq("userId", tAppUser.getId())); @@ -443,6 +486,10 @@ }) public ResultUtil<String> setPhone(String phone, String code, String invitationCode) { System.err.println("邀请码"+invitationCode); AppUser appUser2 = appUserService.getAppUser(); if (appUser2 == null){ return ResultUtil.tokenErr("登录失效"); } if (StringUtils.hasLength(invitationCode)){ // 根据邀请码查询用户id AppUser appUser1 = appUserService.selectOne(new EntityWrapper<AppUser>() @@ -450,11 +497,13 @@ .ne("state", 3)); if (appUser1==null){ return ResultUtil.errorInvite("邀请码无效",null); }else{ if (appUser1.getInviteUserId().equals(appUser2.getId())){ return ResultUtil.error("邀请失败,当前邀请用户为您的邀请人", null); } } } AppUser appUser2 = appUserService.getAppUser(); System.err.println("登录用户id"+appUser2.getId()); System.err.println("手机号"+phone); // 先判断当前电话是否已经被绑定了 AppUser appUser = appUserService.selectOne(new EntityWrapper<AppUser>() .eq("phone", phone) @@ -473,14 +522,14 @@ } // 判断手机验证码是否相同 String value = redisUtil.getValue(phone); if (!code.equals("123456")){ // if (!code.equals("123456")){ if (null == value){ return ResultUtil.error("验证码无效",null); } if (!code.equals(value)){ return ResultUtil.error("验证码错误",null); } } // } // 如果绑定的手机号 已经注册过了 同时没有绑定微信id和苹果id 那么把openId修改过去 AppUser appUser3 = appUserService.selectOne(new EntityWrapper<AppUser>() .eq("phone", phone) @@ -488,74 +537,96 @@ .isNull("appleId") .ne("state", 3)); // 微信绑定 if (appUser3!=null && StringUtils.hasLength(appUser3.getOpenId())){ if (appUser3!=null && StringUtils.hasLength(appUser2.getOpenId())){ appUser3.setOpenId(appUser2.getOpenId()); appUserService.updateById(appUser3); // 同时删除这条数据 appUserService.deleteById(appUser2.getId()); if (StringUtils.hasLength(invitationCode)){ if (appUser3.getInviteUserId()!=null){ return ResultUtil.errorLogin("登录失败,已绑定其他用户",null); return ResultUtil.error("该手机号已绑定其他邀请码",null); } if (appUser3.getCode().equals(invitationCode)){ return ResultUtil.error("不能绑定自己",""); } // 根据邀请码查询用户id AppUser appUser1 = appUserService.selectOne(new EntityWrapper<AppUser>() .eq("code", invitationCode) .ne("state", 3)); if (appUser1==null){ return ResultUtil.errorInvite("邀请码无效",null); return ResultUtil.errorInvite("邀请码无效",""); }else{ if (appUser1.getInviteUserId().equals(appUser2.getId())){ return ResultUtil.error("邀请失败,当前邀请用户为您的邀请人", null); } appUser3.setInviteUserId(appUser1.getId()); } } appUserService.updateById(appUser3); // 同时删除这条数据 appUserService.deleteById(appUser2.getId()); //生成token String token = JwtTokenUtil.generateToken(appUser3.getPhone()); System.err.println("token1111--->" + token); //存入缓存中 addTokenToRedis(token, appUser3.getId()); return ResultUtil.success(token); }else if (appUser3!=null && StringUtils.hasLength(appUser3.getAppleId())){ }else if (appUser3!=null && StringUtils.hasLength(appUser2.getAppleId())){ if (appUser3.getCode().equals(invitationCode)){ return ResultUtil.error("不能绑定自己",""); } // 苹果绑定手机号 appUser3.setAppleId(appUser2.getAppleId()); if (!StringUtils.hasLength(appUser3.getName())){ appUser3.setName(phone); if (StringUtils.hasLength(appUser3.getName())){ // 如果已经有name了不更新 }else{ appUser3.setName("用户-"+appUser3.getCode()); appUser3.setAccount(phone); } appUserService.updateById(appUser3); // 同时删除这条数据 appUserService.deleteById(appUser2.getId()); if (StringUtils.hasLength(invitationCode)){ if (appUser3.getInviteUserId()!=null){ return ResultUtil.errorLogin("登录失败,已绑定其他用户",null); return ResultUtil.error("该手机号已绑定其他邀请码",null); } // 根据邀请码查询用户id AppUser appUser1 = appUserService.selectOne(new EntityWrapper<AppUser>() .eq("code", invitationCode) .ne("state", 3)); if (appUser1==null){ return ResultUtil.errorInvite("邀请码无效",null); return ResultUtil.errorInvite("邀请码无效",""); }else{ if (appUser1.getInviteUserId().equals(appUser2.getId())){ return ResultUtil.error("邀请失败,当前邀请用户为您的邀请人", null); } appUser3.setInviteUserId(appUser1.getId()); } } appUserService.updateById(appUser3); // 同时删除这条数据 appUserService.deleteById(appUser2.getId()); //生成token String token = JwtTokenUtil.generateToken(appUser3.getPhone()); System.err.println("token1111--->" + token); //存入缓存中 addTokenToRedis(token, appUser3.getId()); return ResultUtil.success(token); // 绑定的手机号没有注册过 } appUser2.setPhone(phone); appUser2.setAccount(phone); if (appUser2.getCode()!=null){ appUser2.setName("用户-"+appUser2.getCode()); } if (StringUtils.hasLength(invitationCode)){ if (appUser2.getCode().equals(invitationCode)){ return ResultUtil.error("不能绑定自己",""); } if (appUser2.getInviteUserId()!=null){ return ResultUtil.errorLogin("登录失败,已绑定其他用户",null); return ResultUtil.errorLogin("该手机号已绑定其他邀请码",null); } // 根据邀请码查询用户id AppUser appUser1 = appUserService.selectOne(new EntityWrapper<AppUser>() .eq("code", invitationCode) .ne("state", 3)); if (appUser1==null){ return ResultUtil.errorInvite("邀请码无效",null); return ResultUtil.errorInvite("邀请码无效",""); }else{ appUser2.setInviteUserId(appUser1.getId()); } @@ -568,6 +639,7 @@ addTokenToRedis(token, appUser2.getId()); return ResultUtil.success(token); } @ResponseBody @PostMapping("/base/appUser/loginPassword") @ApiOperation(value = "账号密码登录", tags = {"APP-登录注册"}) @@ -603,10 +675,10 @@ // 判断当前手机号 登陆了哪些设备 List<DeviceLogin> deviceLogins = deviceLoginService.selectList(queryWrapper); List<String> collect = deviceLogins.stream().map(DeviceLogin::getDevice).collect(Collectors.toList()); if (collect.size()>=5 &&!collect.contains(code2)){ // 是一个新的设备登录 返回登陆失败的提示 return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null); } // if (collect.size()>=5 &&!collect.contains(code2)){ // // 是一个新的设备登录 返回登陆失败的提示 // return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null); // } DeviceLogin deviceLogin1 = deviceLoginService.selectOne(new EntityWrapper<DeviceLogin>() .eq("device", code2) .eq("userId", tAppUser.getId())); @@ -648,8 +720,8 @@ // 首次登录注册 AppUser appUser1 = new AppUser(); appUser1.setAppleId(appleId); appUser1.setName(name); appUser1.setAccount(name); appUser1.setAccount("用户"+UUIDUtil.getNumberRandom(5)); appUser1.setPassword(MD5Util.encrypt("111111")); appUser1.setState(1); // 根据当前月份 填入星座名称 @@ -664,11 +736,22 @@ appUser1.setHeadImg("https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/admin/8d9bb8b7fb9a4786a50b88863c7706ab.png"); appUser1.setConstellation(zodiacSign); appUser1.setCode(UUIDUtil.getRandomCode(6).toUpperCase()); appUser1.setName("用户-"+appUser1.getCode()); appUser1.setHeight(155); appUser1.setWeight(130D); appUser1.setWaistline(100); appUser1.setGender(1); // 获取当前时间 Calendar calendar = Calendar.getInstance(); // 将当前时间向前推30年 calendar.add(Calendar.YEAR, -30); Date date30YearsAgo = calendar.getTime(); appUser1.setBirthday(date30YearsAgo); // 根据邀请码 查询到用户 if (StringUtils.hasLength(code2)){ AppUser code3 = appUserService.selectOne(new EntityWrapper<AppUser>() .eq("code", code2)); if (code==null){ if (code3==null){ return ResultUtil.errorInvite("邀请码无效",null); } appUser1.setInviteUserId(code3.getId()); @@ -689,10 +772,10 @@ // 判断当前手机号 登陆了哪些设备 List<DeviceLogin> deviceLogins = deviceLoginService.selectList(queryWrapper); List<String> collect = deviceLogins.stream().map(DeviceLogin::getDevice).collect(Collectors.toList()); if (collect.size()>=5 &&!collect.contains(code)){ // 是一个新的设备登录 返回登陆失败的提示 return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null); } // if (collect.size()>=5 &&!collect.contains(code)){ // // 是一个新的设备登录 返回登陆失败的提示 // return ResultUtil.errorDevice("登录失败,同一账号一年内最多登录五部手机",null); // } DeviceLogin deviceLogin1 = deviceLoginService.selectOne(new EntityWrapper<DeviceLogin>() .eq("device", code) .eq("userId", appUser1.getId())); guns-admin/src/main/java/com/stylefeng/guns/modular/api/FindController.java
@@ -63,7 +63,11 @@ }) public ResultUtil<List<MessagesVO>> messageList(MessageQuery req) { req.setPageNum((req.getPageNum() - 1) * req.getPageSize()); Integer id = appUserService.getAppUser().getId(); AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Integer id = appUser.getId(); List<MessagesVO> res = messageService.selectMessages(id,req); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd"); for (MessagesVO re : res) { @@ -100,8 +104,12 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header") }) public ResultUtil<Integer> messageCount() { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } int size = messageService.selectList(new EntityWrapper<Message>() .eq("userId", appUserService.getAppUser().getId()) .eq("userId", appUser.getId()) .eq("isRead", 0)).size(); return ResultUtil.success(size); } @@ -119,6 +127,10 @@ @ApiImplicitParam(name = "content", value = "回复内容", required = true), }) public ResultUtil addComment(Integer findId,Integer pid,Integer replyUserId,String content,Integer replyCommentId) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } AuditVO content1 = auditUtil.content(content); switch (content1.getType()){ case "terrorism": @@ -174,12 +186,17 @@ @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header") }) public ResultUtil collectCourse(AddFindDTO dto) { public ResultUtil collectCourse(AddFindDTO dto) throws InterruptedException { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } if (StringUtils.hasLength(dto.getVideo())){ // 根据id回查 String id = auditUtil.video(dto.getVideo()); String audit = auditUtil.audit(id); while(audit.equals("running")){ Thread.sleep(500); audit = auditUtil.audit(id); System.err.println("未审核完"); } @@ -261,6 +278,10 @@ @ApiImplicitParam(name = "id", value = "动态id", required = true) }) public ResultUtil<FindVO> findDetail(Integer id) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Find find1 = findService.selectById(id); FindVO findVO = new FindVO(); findVO.setId(find1.getId()); @@ -282,7 +303,7 @@ .eq("findId", find1.getId()) .eq("isShow", 1)).size(); findVO.setComment(size); AppUser appUser = appUserService.selectById(find1.getUserId()); findVO.setHeadImg(appUser.getHeadImg()); findVO.setUserName(appUser.getName()); findVO.setClockIn(appUser.getClockIn()); @@ -308,6 +329,10 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header") }) public ResultUtil<List<CommentVO>> findDetail(CommentQuery query) throws ParseException { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } query.setPageNum((query.getPageNum() - 1) * query.getPageSize()); // 查询一级评论 List<CommentVO> one = findCommentService.getCommentOne(query); @@ -413,6 +438,10 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header") }) public ResultUtil<List<CommentVO>> findCommentListOne(CommentQuery query) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } // 查询一级评论 List<CommentVO> one = findCommentService.getCommentThree(query); for (CommentVO commentVO : one) { @@ -499,6 +528,10 @@ @ApiImplicitParam(name = "type", value = "类型 1 = 点赞动态 2 = 点赞评论", required = true) }) public ResultUtil cancelLike(Integer id,Integer type) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Like like = likeService.selectOne(new EntityWrapper<Like>() .eq("userId", appUserService.getAppUser().getId()) .eq("type", type) @@ -518,8 +551,11 @@ @ApiImplicitParam(name = "type", value = "类型 1 = 点赞动态 2 = 点赞评论", required = true) }) public ResultUtil Like(Integer id,Integer type,Integer findCommentId) { // 点赞之后要加入一条消息 AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } // 点赞之后要加入一条消息 Message message = new Message(); message.setType(2); message.setFindId(id); @@ -601,6 +637,10 @@ @ApiImplicitParam(name = "type", value = "类型 1 = 举报动态 2 = 举报评论", required = true) }) public ResultUtil report(Integer id,String content,Integer type) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } AuditVO content1 = auditUtil.content(content); switch (content1.getType()){ case "terrorism": @@ -639,6 +679,8 @@ return ResultUtil.success("举报成功"); } @Autowired private IUserBlackService userBlackService; @ResponseBody @PostMapping("/base/find/findList") @ApiOperation(value = "主页", tags = {"发现"}) @@ -647,13 +689,29 @@ }) public ResultUtil<List<FindVO>> findList(FindQuery query) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } EntityWrapper<Find> wrapper = new EntityWrapper<>(); if (StringUtils.hasLength(query.getUserNameOrTitle())){ wrapper.like("title",query.getUserNameOrTitle()); } List<FindVO> result = findService.findList(query.getUserNameOrTitle()); for (FindVO find : result) { List<FindVO> res = new ArrayList<>(); // 被拉黑用户ids List<Integer> collect = userBlackService.selectList(new EntityWrapper<UserBlack>() .eq("userId", appUser.getId())).stream().map(UserBlack::getBlackUserId).collect(Collectors.toList()); // todo 2.0新增 被拉黑不查看双方动态 for (FindVO find : result) { // 如果用户拉黑了 那么不展示该条动态 if (collect.size()>0){ if (collect.contains(find.getUserId())){ // 如果当前动态的发布用户id 是登录用户的黑名单 那过滤掉该条动态 continue; } } FindVO temp = new FindVO(); BeanUtils.copyProperties(find,temp); Like like = likeService.selectOne(new EntityWrapper<Like>() @@ -671,8 +729,9 @@ .eq("findId", find.getId()) .eq("isShow", 1)).size(); find.setComment(size); res.add(find); } List<FindVO> testing = testing(result.size(), query.getPageNum(), query.getPageSize(), result); List<FindVO> testing = testing(res.size(), query.getPageNum(), query.getPageSize(), res); return ResultUtil.success(testing); } public static List<FindVO> testing(long total, long current, long size, List<FindVO> str){ guns-admin/src/main/java/com/stylefeng/guns/modular/api/SportsController.java
@@ -1,12 +1,26 @@ package com.stylefeng.guns.modular.api; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.PrintWriter; import java.math.BigInteger; import java.math.RoundingMode; import java.security.KeyFactory; import java.security.PrivilegedAction; import java.security.PublicKey; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.security.interfaces.ECPublicKey; import java.security.spec.X509EncodedKeySpec; import java.sql.Timestamp; import java.time.LocalTime; import java.util.Date; import com.alibaba.fastjson.JSONObject; import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.SignatureVerificationException; import com.auth0.jwt.interfaces.DecodedJWT; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.modular.system.dto.AddUserWatchDTO; import com.stylefeng.guns.modular.system.model.*; @@ -16,6 +30,8 @@ import com.stylefeng.guns.modular.system.util.Page; import com.stylefeng.guns.modular.system.vo.*; import com.stylefeng.guns.modular.system.dto.CourseQuery; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiModelProperty; @@ -86,6 +102,7 @@ return "LO" + sdf.format(new Date()) + UUIDUtil.getRandomCode(5); } @Autowired private IRechargeService rechargeService; @PostMapping("/iospay") @@ -153,11 +170,32 @@ BigDecimal realMoney) throws Exception { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } BaseWarpper baseWarpper = new BaseWarpper(); switch (buyType){ case 1: Course course = courseService.selectById(id); BigDecimal amount = fitnessPositionService.selectById(course.getPositionId()).getAmount(); FitnessPosition fitnessPosition = fitnessPositionService.selectById(course.getPositionId()); BigDecimal amount = new BigDecimal(BigInteger.ZERO); switch (course.getDifficulty()){ case 1: amount = fitnessPosition.getAmount(); break; case 2: amount = fitnessPosition.getAmount2(); break; case 3: amount = fitnessPosition.getAmount3(); break; case 4: amount = fitnessPosition.getAmount4(); break; case 5: amount = fitnessPosition.getAmount5(); break; } // 购买课程 OrderCourse orderCourse = new OrderCourse(); orderCourse.setCode(this.getOrderNum()); @@ -218,7 +256,68 @@ } return ResultUtil.success(); } /** * 购买套餐微信支付回调 * * @param request * @param response */ @ResponseBody @PostMapping("/base/testApple") public void testApple(HttpServletRequest request, HttpServletResponse response) { try { Map<String, String> params = new HashMap<String, String>(); System.err.println("请求"+request); BufferedReader reader = request.getReader(); String string1 = reader.toString(); System.err.println("请求reader"+string1); StringBuilder requestBody = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { requestBody.append(line); } System.err.println("全部请求体"+requestBody); org.json.JSONObject jsonObject1 = new org.json.JSONObject(requestBody.toString()); System.err.println("json串"+jsonObject1); String o = jsonObject1.getString("signedPayload"); JSONObject payload = verifyAndGet(o); String notificationType = payload.get("notificationType").toString(); JSONObject data = payload.getJSONObject("data"); String signedTransactionInfo = data.get("signedTransactionInfo").toString(); String environment = data.get("environment").toString(); JSONObject transactionInfo = verifyAndGet(signedTransactionInfo); String transactionId = transactionInfo.get("transactionId").toString(); String originalTransactionId = transactionInfo.get("originalTransactionId").toString(); String productId = transactionInfo.get("productId").toString(); System.err.println("json串"+transactionInfo); System.err.println("data"+data); // 苹果流水号 String string = transactionInfo.getString("originalTransactionId"); System.err.println("苹果流水号"+string); Recharge orderNumber = rechargeService.selectOne(new EntityWrapper<Recharge>() .eq("orderNumber", string)); if (orderNumber!=null){ if (orderNumber.getState()!=2){ // 进入 orderNumber.setState(2); orderNumber.setPayTime(new Date()); rechargeService.updateById(orderNumber); BigDecimal amount = orderNumber.getAmount(); AppUser appUser = appUserService.selectById(orderNumber.getUserId()); BigDecimal add = appUser.getBalance().add(amount); appUser.setBalance(add); appUserService.updateById(appUser); } } PrintWriter out = response.getWriter(); out.write("success"); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 购买套餐微信支付回调 * @@ -246,6 +345,67 @@ order.setPayTime(new Date()); order.setPayType(1); orderService.updateById(order); BigDecimal divisor = new BigDecimal("100"); // 计算提成 SysSet sysSet = sysSetService.selectById(1); // 邀请人可获得被邀请人消费金额比例 String people = sysSet.getPeople(); // 团队长可获得团员消费金额比例 String header = sysSet.getHeader(); // 邀请人比例 BigDecimal bigDecimal = new BigDecimal(people).divide(divisor); // 获取金额 BigDecimal multiply = order.getRealMoney().multiply(bigDecimal); BigDecimal bigDecimal1 = multiply.setScale(2, BigDecimal.ROUND_DOWN); // 如果使用了优惠券将优惠券修改为已消费 if (order.getCouponId()!=null){ CouponReceive couponReceive1 = couponReceiveService.selectById(order.getCouponId()); couponReceive1.setState(2); couponReceiveService.updateById(couponReceive1); } AppUser appUser = appUserService.selectById(order.getUserId()); // 如果当前用户有邀请人 if (appUser.getInviteUserId()!=null){ if (StringUtils.hasLength(people)){ Invite invite = new Invite(); invite.setUserId(appUser.getId()); invite.setInsertTime(new Date()); invite.setAmount(bigDecimal1); invite.setConsume(order.getRealMoney()); invite.setGiftUserId(appUser.getInviteUserId()); invite.setType(1); inviteService.insert(invite); // 给用户加余额 AppUser appUser1 = appUserService.selectById(appUser.getInviteUserId()); BigDecimal balance1 = appUser1.getBalance(); BigDecimal add = balance1.add(bigDecimal1); appUser1.setBalance(add); appUserService.updateById(appUser1); } if (StringUtils.hasLength(header)){ // 先判断当前用户有没有团队长 if (appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()!=null){ // 有团队长 BigDecimal bigDecimal2 = new BigDecimal(header).divide(divisor); BigDecimal multiply1 = order.getRealMoney().multiply(bigDecimal2); BigDecimal bigDecimal3 = multiply1.setScale(2, BigDecimal.ROUND_DOWN); Invite invite = new Invite(); invite.setUserId(appUser.getId()); invite.setInsertTime(new Date()); invite.setAmount(bigDecimal3); invite.setConsume(order.getRealMoney()); invite.setGiftUserId(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()); invite.setType(2); inviteService.insert(invite); // 给用户加余额 AppUser appUser1 = appUserService.selectById(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()); BigDecimal balance1 = appUser1.getBalance(); BigDecimal add = balance1.add(bigDecimal1); // appUser1.setBalance(add); appUserService.updateById(appUser1); } } } PrintWriter out = response.getWriter(); out.write(result); out.flush(); @@ -282,6 +442,68 @@ orderCourse.setPayType(1); orderCourse.setPayTime(new Date()); orderCourseService.updateById(orderCourse); // 如果使用了优惠券将优惠券修改为已消费 if (orderCourse.getCouponId()!=null){ CouponReceive couponReceive1 = couponReceiveService.selectById(orderCourse.getCouponId()); couponReceive1.setState(2); couponReceiveService.updateById(couponReceive1); } BigDecimal divisor = new BigDecimal("100"); // 计算提成 SysSet sysSet = sysSetService.selectById(1); // 邀请人可获得被邀请人消费金额比例 String people = sysSet.getPeople(); // 团队长可获得团员消费金额比例 String header = sysSet.getHeader(); // 邀请人比例 BigDecimal bigDecimal = new BigDecimal(people).divide(divisor); // 获取金额 BigDecimal multiply = orderCourse.getRealMoney().multiply(bigDecimal); BigDecimal bigDecimal1 = multiply.setScale(2, BigDecimal.ROUND_DOWN); AppUser appUser = appUserService.selectById(orderCourse.getUserId()); // 如果当前用户有邀请人 if (appUser.getInviteUserId()!=null){ if (StringUtils.hasLength(people)){ Invite invite = new Invite(); invite.setUserId(appUser.getId()); invite.setInsertTime(new Date()); invite.setAmount(bigDecimal1); invite.setConsume(orderCourse.getRealMoney()); invite.setGiftUserId(appUser.getInviteUserId()); invite.setType(1); inviteService.insert(invite); // 给用户加余额 AppUser appUser1 = appUserService.selectById(appUser.getInviteUserId()); BigDecimal balance1 = appUser1.getBalance(); BigDecimal add = balance1.add(bigDecimal1); appUser1.setBalance(add); appUserService.updateById(appUser1); } if (StringUtils.hasLength(header)){ // 先判断当前用户有没有团队长 if (appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()!=null){ // 有团队长 BigDecimal bigDecimal2 = new BigDecimal(header).divide(divisor); BigDecimal multiply1 = orderCourse.getRealMoney().multiply(bigDecimal2); BigDecimal bigDecimal3 = multiply1.setScale(2, BigDecimal.ROUND_DOWN); Invite invite = new Invite(); invite.setUserId(appUser.getId()); invite.setInsertTime(new Date()); invite.setAmount(bigDecimal3); invite.setConsume(orderCourse.getRealMoney()); invite.setGiftUserId(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()); invite.setType(2); inviteService.insert(invite); // 给用户加余额 AppUser appUser1 = appUserService.selectById(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()); BigDecimal balance1 = appUser1.getBalance(); BigDecimal add = balance1.add(bigDecimal1); // appUser1.setBalance(add); appUserService.updateById(appUser1); } } } PrintWriter out = response.getWriter(); out.write(result); out.flush(); @@ -320,7 +542,11 @@ recharge.setPayTime(new Date()); recharge.setPayType(1); rechargeService.updateById(recharge); AppUser appUser = appUserService.selectById(recharge.getUserId()); BigDecimal balance = appUser.getBalance(); BigDecimal add = balance.add(recharge.getAmount()); appUser.setBalance(add); appUserService.updateById(appUser); PrintWriter out = response.getWriter(); out.write(result); out.flush(); @@ -330,8 +556,90 @@ e.printStackTrace(); } } @ResponseBody @PostMapping("/base/applePayResult") public void applePayResult(HttpServletRequest request, HttpServletResponse response) { } @Autowired private IInviteService inviteService; @ResponseBody @PostMapping("/base/sports/payApple") @ApiOperation(value = "苹果支付补偿", tags = {"运动"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), @ApiImplicitParam(name = "id", value = "课程id或者套餐id", required = true), @ApiImplicitParam(name = "buyType", value = "购买类型 1=购买课程 2=购买套餐 ", required = true), @ApiImplicitParam(name = "transactionReceipt", value = "苹果账单"), }) public ResultUtil payApple( Integer id, Integer buyType, String transactionReceipt) throws Exception { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } switch (buyType){ case 1: Course orderCourse1 = courseService.selectById(id); FitnessPosition fitnessPosition = fitnessPositionService.selectById(orderCourse1.getPositionId()); switch (orderCourse1.getDifficulty()){ case 1: fitnessPosition.setAmount(fitnessPosition.getAppleAmount()); break; case 2: fitnessPosition.setAmount(fitnessPosition.getAppleAmount2()); break; case 3: fitnessPosition.setAmount(fitnessPosition.getAppleAmount3()); break; case 4: fitnessPosition.setAmount(fitnessPosition.getAppleAmount4()); break; case 5: fitnessPosition.setAmount(fitnessPosition.getAppleAmount5()); break; } Boolean success1 = IosPalUtils.isSuccess(transactionReceipt); if (success1){ OrderCourse orderCourse = new OrderCourse(); orderCourse.setCode(this.getOrderNum()); orderCourse.setOrderNumber(this.getOrderNum()); orderCourse.setUserId(appUser.getId()); orderCourse.setPayTime(new Date()); orderCourse.setInsertTime(new Date()); orderCourse.setPayType(4); orderCourse.setAmount(fitnessPosition.getAppleAmount()); orderCourse.setCouponId(null); orderCourse.setRealMoney(fitnessPosition.getAppleAmount()); orderCourse.setState(2); orderCourse.setCourseId(id); orderCourseService.insert(orderCourse); } break; case 2: Package orderCourse2 = packageService.selectById(id); Boolean success2 = IosPalUtils.isSuccess(transactionReceipt); if (success2){ Order orderCourse = new Order(); orderCourse.setCode(this.getOrderNum()); orderCourse.setOrderNumber(this.getOrderNum()); orderCourse.setUserId(appUser.getId()); orderCourse.setPayTime(new Date()); orderCourse.setInsertTime(new Date()); orderCourse.setPayType(4); orderCourse.setAmount(orderCourse2.getAppleAmount()); orderCourse.setCouponId(null); orderCourse.setRealMoney(orderCourse2.getAppleAmount()); orderCourse.setState(2); orderCourse.setPackageId(id); orderService.insert(orderCourse); } break; } return ResultUtil.success(); } @ResponseBody @PostMapping("/base/sports/pay") @ApiOperation(value = "支付", tags = {"运动"}) @@ -351,26 +659,57 @@ String transactionIdentifier, BigDecimal orderMoney) throws Exception { AppUser appUser = appUserService.getAppUser(); OrderCourse orderCourse = orderCourseService.selectOne(new EntityWrapper<OrderCourse>() .eq("id",id) .eq("userId",appUser.getId())); Order order = orderService.selectOne(new EntityWrapper<Order>() .eq("id",id) .eq("userId",appUser.getId())); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } switch (buyType){ case 1: OrderCourse orderCourse = orderCourseService.selectOne(new EntityWrapper<OrderCourse>() .eq("id",id) .eq("userId",appUser.getId())); // if (orderCourse != null){ // payType = orderCourse.getPayType(); // } break; case 2: Order order = orderService.selectOne(new EntityWrapper<Order>() .eq("id",id) .eq("userId",appUser.getId())); // if (order!=null){ // payType = order.getPayType(); // } break; case 3: Recharge recharge1 = rechargeService.selectOne(new EntityWrapper<Recharge>() .eq("id",id) .eq("userId",appUser.getId())); if (recharge1 != null){ if (payType == 4){ recharge1.setPayType(3); }else{ recharge1.setPayType(payType); } // payType = recharge1.getPayType(); recharge1.setOrderNumber(transactionIdentifier); rechargeService.updateById(recharge1); } break; } Recharge recharge1 = rechargeService.selectOne(new EntityWrapper<Recharge>() .eq("id",id) .eq("userId",appUser.getId())); if (recharge1 != null){ payType = recharge1.getPayType(); }else if (order!=null){ payType = order.getPayType(); } else if (orderCourse != null){ payType = orderCourse.getPayType(); } OrderCourse orderCourse = orderCourseService.selectOne(new EntityWrapper<OrderCourse>() .eq("id",id) .eq("userId",appUser.getId())); Order order = orderService.selectOne(new EntityWrapper<Order>() .eq("id",id) .eq("userId",appUser.getId())); switch (payType){ case 1: switch (buyType){ case 1: return payMoneyUtil.weixinpay ("购买课程下单支付", "", id + "_" +buyType+"_"+ @@ -378,6 +717,7 @@ orderCourse.getRealMoney().toString(), "/base/wxPayBuyCourse", "APP", ""); case 2: return payMoneyUtil.weixinpay ("购买套餐下单支付", "", id + "_" +buyType+"_"+ @@ -385,6 +725,7 @@ order.getRealMoney().toString(), "/base/wxPayBuyPackage", "APP", ""); case 3: return payMoneyUtil.weixinpay ("充值余额下单支付", "", id + "_" +buyType+"_"+ @@ -494,7 +835,7 @@ AppUser appUser1 = appUserService.selectById(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()); BigDecimal balance1 = appUser1.getBalance(); BigDecimal add = balance1.add(bigDecimal1); appUser1.setBalance(add); // appUser1.setBalance(add); appUserService.updateById(appUser1); } } @@ -565,7 +906,7 @@ AppUser appUser1 = appUserService.selectById(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()); BigDecimal balance5 = appUser1.getBalance(); BigDecimal add = balance5.add(bigDecimal3); appUser1.setBalance(add); // appUser1.setBalance(add); appUserService.updateById(appUser1); } } @@ -578,57 +919,39 @@ // 苹果支付 全部用余额来购买 如果余额不足 提示购买余额 case 1: // 购买课程 BigDecimal realMoney = orderCourse.getRealMoney(); if (appUser.getBalance().compareTo(realMoney)<0) { return ResultUtil.error("余额不足"); Boolean success = IosPalUtils.isSuccess(transactionReceipt); if (success){ // 购买成功 将支付状态修改为已支付 orderCourse.setState(2); orderCourse.setPayTime(new Date()); orderCourse.setPayType(4); orderCourseService.updateById(orderCourse); } break; case 2: BigDecimal realMoney1 = order.getRealMoney(); if (appUser.getBalance().compareTo(realMoney1)<0) { return ResultUtil.error("余额不足"); // 购买课程 Boolean success1 = IosPalUtils.isSuccess(transactionReceipt); if (success1){ // 购买成功 将支付状态修改为已支付 order.setState(2); order.setPayTime(new Date()); order.setPayType(4); orderService.updateById(order); } break; // todo 2.0ios取消余额 case 3: recharge1.setState(2); recharge1.setPayType(3); rechargeService.updateById(recharge1); BigDecimal amount = recharge1.getAmount(); BigDecimal add = appUser.getBalance().add(amount); appUser.setBalance(add); appUserService.updateById(appUser); break; Boolean success3 = IosPalUtils.isSuccess(transactionReceipt); // if (success3){ // recharge1.setState(2); // rechargeService.updateById(recharge1); // BigDecimal amount = recharge1.getAmount(); // BigDecimal add = appUser.getBalance().add(amount); // appUser.setBalance(add); // appUserService.updateById(appUser); // break; // } } // if (StringUtils.hasLength(transactionReceipt)){ // // 调用苹果 查询支付结果 // String verifyResult = IosVerifyUtil.buyAppVerify(transactionReceipt, 0); // if (verifyResult == null) { // return ResultUtil.error("苹果验证失败,返回数据为空"); // }else{ // JSONObject appleReturn = JSONObject.parseObject(verifyResult); // String states = appleReturn.getString("status"); // //无数据则沙箱环境验证 // if ("21007".equals(states)) { // verifyResult = IosVerifyUtil.buyAppVerify(transactionReceipt, 0); // System.err.println("沙盒环境,苹果平台返回JSON:" + verifyResult);; // appleReturn = JSONObject.parseObject(verifyResult); // states = appleReturn.getString("status"); // } // if (states.equals("0")) { // String receipt1 = appleReturn.getString("receipt"); // JSONObject returnJson = JSONObject.parseObject(receipt1); // String inApp = returnJson.getString("in_app"); // List<HashMap> inApps = JSONObject.parseArray(inApp, HashMap.class); // if (inApps!=null) { // // 判断交易列表有没有包含当前订单 // } // return ResultUtil.error("未能获取获取到交易列表"); // } else { // return ResultUtil.error("支付失败,错误码:" + states); // } // } // } break; } return ResultUtil.success(); @@ -718,7 +1041,7 @@ AppUser appUser1 = appUserService.selectById(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()); BigDecimal balance1 = appUser1.getBalance(); BigDecimal add = balance1.add(bigDecimal1); appUser1.setBalance(add); // appUser1.setBalance(add); appUserService.updateById(appUser1); } } @@ -814,7 +1137,7 @@ AppUser appUser1 = appUserService.selectById(appUserService.selectById(appUser.getInviteUserId()).getInviteUserId()); BigDecimal balance1 = appUser1.getBalance(); BigDecimal add = balance1.add(bigDecimal1); appUser1.setBalance(add); // appUser1.setBalance(add); appUserService.updateById(appUser1); } } @@ -878,6 +1201,10 @@ @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "int", required = true), }) public ResultUtil<CouponVO> success(Integer orderId) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } CouponVO couponVO = new CouponVO(); // 查询后台有没有配置首次下单赠送奖品 SysSet sysSet = sysSetService.selectById(1); @@ -1099,6 +1426,10 @@ @ApiImplicitParam(value = "课程id", name = "courseId", dataType = "int", required = true) }) public ResultUtil<BuyDetailVO> buyCourse(Integer courseId) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } BuyDetailVO buyDetailVO = new BuyDetailVO(); buyDetailVO.setId(courseId); // 查询课程 @@ -1108,8 +1439,29 @@ FitnessPosition fitnessPosition = fitnessPositionService.selectById(positionId); FitnessType fitnessType = fitnessTypeService.selectById(fitnessPosition.getTypeId()); if (fitnessPosition!=null && fitnessType!=null){ typeName.append(fitnessType.getName()+"|"+fitnessPosition.getName()); buyDetailVO.setAmount(fitnessPosition.getAmount()); typeName.append(fitnessType.getName()+"|"+fitnessPosition.getName()+"|H"+course.getDifficulty()); switch (course.getDifficulty()){ case 1: buyDetailVO.setAmount(fitnessPosition.getAmount()); buyDetailVO.setAppleAmount(fitnessPosition.getAppleAmount()); break; case 2: buyDetailVO.setAmount(fitnessPosition.getAmount2()); buyDetailVO.setAppleAmount(fitnessPosition.getAppleAmount2()); break; case 3: buyDetailVO.setAmount(fitnessPosition.getAmount3()); buyDetailVO.setAppleAmount(fitnessPosition.getAppleAmount3()); break; case 4: buyDetailVO.setAmount(fitnessPosition.getAmount4()); buyDetailVO.setAppleAmount(fitnessPosition.getAppleAmount4()); break; case 5: buyDetailVO.setAmount(fitnessPosition.getAmount5()); buyDetailVO.setAppleAmount(fitnessPosition.getAppleAmount5()); break; } } buyDetailVO.setTypeName(typeName.toString()); int size = courseService.selectList(new EntityWrapper<Course>() @@ -1119,7 +1471,7 @@ // 查询和这个课程同类型同部位的课程数量 buyDetailVO.setCount(size); // 查询可选套餐列表 查询包含当前购买部位的课程的套餐 List<PackageListVO> packageListVOS = new ArrayList<PackageListVO>(); List<PackageListVO> packageListVOS = new ArrayList<>(); List<Package> packages = packageService.selectList(new EntityWrapper<Package>() .eq("state", 1)); for (Package aPackage : packages) { @@ -1131,8 +1483,10 @@ packageListVO.setPackageName(aPackage.getName()); if (aPackage.getAmount()!=null){ packageListVO.setAmount(aPackage.getAmount()); packageListVO.setAppleAmount(aPackage.getAppleAmount()); }else{ packageListVO.setAmount(aPackage.getTotal()); packageListVO.setAmount(new BigDecimal(0)); } packageListVO.setPrice(aPackage.getPrice()); packageListVO.setIds(aPackage.getPositions()); @@ -1151,11 +1505,12 @@ FitnessPosition fitnessPosition1 = fitnessPositionService.selectById(Integer.valueOf(s)); FitnessType fitnessType1 = fitnessTypeService.selectById(fitnessPosition1.getTypeId()); if (fitnessPosition1!=null && fitnessType1!=null){ temp.append(fitnessType1.getName()+"|"+fitnessPosition1.getName()); temp.append(fitnessType1.getName()+"|"+fitnessPosition1.getName()+"|H"+course.getDifficulty()); } courseVO.setTypeName(temp.toString()); List<Course> courses = courseService.selectList(new EntityWrapper<Course>() .eq("state", 1) .eq("difficulty", course.getDifficulty()) .eq("positionId", Integer.valueOf(s))); // Integer tem = 0; // for (Course cours : courses) { @@ -1171,7 +1526,6 @@ } buyDetailVO.setPackageListVOList(packageListVOS); // 查询可以使用的优惠券列表 AppUser appUser = appUserService.getAppUser(); List<CouponReceive> couponReceives = couponReceiveService.selectList (new EntityWrapper<CouponReceive>() .eq("userId", appUser.getId()) @@ -1247,6 +1601,10 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), }) public ResultUtil<StartVO> riskInfo() { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } String riskInfo = sysSetService.selectById(1).getRiskInfo(); StartVO startVO = new StartVO(); startVO.setRiskInfo(riskInfo); @@ -1269,6 +1627,10 @@ @ApiImplicitParam(name = "courseId", value = "课程id", required = true) }) public ResultUtil<StartTrainVO> startTrain(Integer courseId) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } StartTrainVO startTrainVO = new StartTrainVO(); // 根据课程id和用户id 查询用户上次播放位置 Integer id = appUserService.getAppUser().getId(); @@ -1286,6 +1648,11 @@ List<CourseVideo> courseVideos = courseVideoService.selectList(new EntityWrapper<CourseVideo>() .eq("courseId", courseId) .eq("isDelete", 0)); for (CourseVideo courseVideo : courseVideos) { String courseVideo1 = courseVideo.getCourseVideo(); String replace = courseVideo1.replace("https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/", "http://cdn.jkcyl.cn/"); courseVideo.setCourseVideo(replace); } int totalTime = courseVideos.stream() .mapToInt(CourseVideo::getTime) .sum(); @@ -1297,7 +1664,10 @@ startTrainVO.setBeforeTime(0); startTrainVO.setBeforeVideoId(courseVideos.get(0).getId()); startTrainVO.setRealTime(0); startTrainVO.setCourseVideo(courseVideos.get(0).getCourseVideo()); // 手动替换为cdn域名 String courseVideo = courseVideos.get(0).getCourseVideo(); String replace = courseVideo.replace("https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/", "http://cdn.jkcyl.cn/"); startTrainVO.setCourseVideo(replace); startTrainVO.setVideoName(courseVideos.get(0).getVideoName()); startTrainVO.setVideos(courseVideos); startTrainVO.setPosition("1/"+courseVideos.size()); @@ -1309,7 +1679,8 @@ CourseVideo courseVideo = courseVideoService.selectById(beforeVideoId); if (courseVideo!=null){ startTrainVO.setTime(courseVideo.getTime()); startTrainVO.setCourseVideo(courseVideo.getCourseVideo()); String replace = courseVideo.getCourseVideo().replace("https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/", "http://cdn.jkcyl.cn/"); startTrainVO.setCourseVideo(replace); startTrainVO.setVideoName(courseVideo.getVideoName()); startTrainVO.setBeforeTime(beforeTime); startTrainVO.setBeforeVideoId(beforeVideoId); @@ -1317,7 +1688,8 @@ }else{ // 如果为空 那么定位到课程下的第一条视频的0秒处 startTrainVO.setTime(courseVideos.get(0).getTime()); startTrainVO.setCourseVideo(courseVideos.get(0).getCourseVideo()); String replace = courseVideos.get(0).getCourseVideo().replace("https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/", "http://cdn.jkcyl.cn/"); startTrainVO.setCourseVideo(replace); startTrainVO.setVideoName(courseVideos.get(0).getVideoName()); startTrainVO.setBeforeTime(0); startTrainVO.setBeforeVideoId(courseVideos.get(0).getId()); @@ -1343,6 +1715,10 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), }) public ResultUtil exit(AddUserWatchDTO dto) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Integer id = appUserService.getAppUser().getId(); Integer courseId = dto.getCourseId(); UserWatch userWatches = userWatchService.selectOne(new EntityWrapper<UserWatch>() @@ -1377,6 +1753,10 @@ @ApiImplicitParam(name = "courseId", value = "课程id", required = true) }) public ResultUtil<CompeleteVO> clockIn(Integer courseId) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Integer isFree = courseService.selectById(courseId).getIsFree(); CompeleteVO compeleteVO = new CompeleteVO(); Integer id = appUserService.getAppUser().getId(); @@ -1385,7 +1765,6 @@ .eq("userId", id)); userWatches.setClockTime(new Date()); userWatchService.updateById(userWatches); AppUser appUser = appUserService.getAppUser(); // 查询优惠券列表是否有打卡赠送 且未过期的优惠券 List<Coupon> coupons = couponService.selectList(new EntityWrapper<Coupon>() .eq("grantType", 1) @@ -1634,6 +2013,10 @@ @ApiImplicitParam(name = "courseId", value = "课程id", required = true) }) public ResultUtil<CompeleteVO> completeInfo(Integer courseId) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Date compeleteTime = appUserService.getAppUser().getCompeleteTime(); if (compeleteTime!=null){ Date date = new Date(); @@ -1641,13 +2024,11 @@ if (format.format(date).equals(format.format(compeleteTime))) { // 同一天那么不计算坚持运动天数 }else{ AppUser appUser = appUserService.getAppUser(); appUser.setCompeleteTime(new Date()); appUser.setTime(appUser.getTime()+1); appUserService.updateById(appUser); } }else{ AppUser appUser = appUserService.getAppUser(); appUser.setTime(appUser.getTime()+1); appUser.setCompeleteTime(new Date()); appUserService.updateById(appUser); @@ -1657,9 +2038,28 @@ .eq("courseId", courseId) .eq("userId", id)); if (userWatches!=null){ // 打卡后 将观看记录初始化 // 将观看记录初始化 userWatches.setBeforeTime(0); userWatches.setRealTime(0); // 获取上次播放到的视频id // Integer beforeVideoId = userWatches.getBeforeVideoId(); List<CourseVideo> courseVideos = courseVideoService.selectList(new EntityWrapper<CourseVideo>() .eq("courseId", courseId) .eq("isDelete", 0)); // int index = 0; // for (CourseVideo courseVideo : courseVideos) { // if (courseVideo.getId().equals(beforeVideoId)){ // // 如果courseVieo不是最后一条数据 那么将courseVieo的下一条数据设置为beforeVideoId // if (index<courseVideos.size()-1){ // userWatches.setBeforeVideoId(courseVideos.get(index+1).getId()); // }else{ // // 如果courseVieo是最后一条数据 那么设置为从第一节开始播放 // userWatches.setBeforeVideoId(courseVideos.get(0).getId()); // } // } // index++; // } userWatches.setBeforeVideoId(courseVideos.get(0).getId()); userWatchService.updateById(userWatches); }else{ UserWatch userWatch = new UserWatch(); @@ -1674,7 +2074,7 @@ userWatch.setRealTime(0); userWatchService.insert(userWatch); } AppUser appUser = appUserService.getAppUser(); // 返回页面内容 Course course = courseService.selectById(courseId); CompeleteVO compeleteVO = new CompeleteVO(); @@ -1697,6 +2097,10 @@ @ApiImplicitParam(value = "课程id", name = "courseId", dataType = "int", required = true) }) public ResultUtil collectCourse(Integer courseId) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Integer id = appUserService.getAppUser().getId(); // 先判断用户是否收藏了该课程 UserCollect userCollect1 = collectService.selectOne(new EntityWrapper<UserCollect>() @@ -1724,6 +2128,12 @@ @ApiImplicitParam(value = "课程id", name = "courseId", dataType = "int", required = true) }) public ResultUtil<CourseDetailVO> courseDetail(Integer courseId) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } // 推荐课程3个 相同类型 相同难度 按sort排序 Course course = courseService.selectById(courseId); Integer userId = appUserService.getAppUser().getId(); CourseDetailVO res = new CourseDetailVO(); List<Integer> list = new ArrayList<>(); @@ -1761,7 +2171,8 @@ if (res.getIsBuy()!=1){ for (Order aPackage : packages) { Integer packageId = aPackage.getPackageId(); String positions = packageService.selectById(packageId).getPositions(); Package aPackage1 = packageService.selectById(packageId); String positions = aPackage1.getPositions(); if (StringUtils.hasLength(positions)){ String[] split = positions.split(","); // 通过部位ids 获取到课程ids @@ -1770,19 +2181,26 @@ .collect(Collectors.toList()); if (positionId.contains(courseId)){ res.setIsBuy(1); break; // todo 新增需求 套餐设置指定难度 需要再判断一次难度 // Integer difficulty = course.getDifficulty(); // if (difficulty.equals(aPackage1.getDifficulty())){ // break; // } } } } } // 推荐课程3个 相同类型 相同难度 按sort排序 if (res.getIsBuy() != 1){ // 先查询出和这个课程同类型同部位 Course course1 = courseService.selectById(courseId); // 相同的课程id // 相同的课程id 部位和难度相同 List<Integer> positionId = courseService.selectList(new EntityWrapper<Course>() .eq("positionId", course1.getPositionId())).stream().map(Course::getId).collect(Collectors.toList()); .eq("positionId", course1.getPositionId()) .eq("difficulty",course1.getDifficulty()) ).stream().map(Course::getId).collect(Collectors.toList()); // 查询下用户有没有购买其他相同部位和类型的课程 如果有 那么就算已购买 // 查询下用户有没有购买其他相同部位和类型和难度的课程 如果有 那么就算已购买 // 查询用户已购买的课程 List<OrderCourse> orderCourses = orderCourseService.selectList(new EntityWrapper<OrderCourse>() .eq("userId", appUserService.getAppUser().getId()) @@ -1794,8 +2212,7 @@ } // 推荐课程3个 相同类型 相同难度 按sort排序 Course course = courseService.selectById(courseId); Integer difficulty = course.getDifficulty(); Integer typeId = course.getTypeId(); List<String> strings = new ArrayList<>(); @@ -1814,6 +2231,10 @@ List<CourseVideo> courseVideos = courseVideoService.selectList(new EntityWrapper<CourseVideo>() .eq("courseId", courseId) .eq("isDelete", 0)); for (CourseVideo courseVideo : courseVideos) { String replace = courseVideo.getCourseVideo().replace("https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/", "http://cdn.jkcyl.cn/"); courseVideo.setCourseVideo(replace); } res.setVideos(courseVideos); return ResultUtil.success(res); @@ -1828,6 +2249,10 @@ }) public ResultUtil<List<CourseList>> myCourse(CourseQuery req) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } req.setUserId(appUser.getId()); if (StringUtils.hasLength(req.getTime())){ for (String s : req.getTime().split(",")) { @@ -1888,12 +2313,18 @@ List<Integer> list = new ArrayList<>(); // 根据套餐ids 查询课程ids for (Integer integer : collect) { String positions = packageService.selectById(integer).getPositions(); Package aPackage = packageService.selectById(integer); String positions = aPackage.getPositions(); String difficulty = aPackage.getDifficulty(); if (StringUtils.hasLength(positions)){ String[] split = positions.split(","); // 难度ids String[] split1 = difficulty.split(","); // 通过部位ids 获取到课程ids List<Integer> positionId = courseService.selectList(new EntityWrapper<Course>() .in("positionId", split)).stream().map(Course::getId) .in("positionId", split) .in("difficulty", split1) ).stream().map(Course::getId) .collect(Collectors.toList()); list.addAll(positionId); } @@ -1918,7 +2349,9 @@ // 和当前课程同类型同部位的课程 List<Integer> collect1 = courseService.selectList(new EntityWrapper<Course>() .eq("state", 1) .eq("positionId", positionId)).stream().map(Course::getId).collect(Collectors.toList()); .eq("positionId", positionId) .eq("difficulty", course.getDifficulty()) ).stream().map(Course::getId).collect(Collectors.toList()); if (collect1.size()>0){ list1.addAll(collect1); } @@ -1981,6 +2414,10 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header") }) public ResultUtil<List<CourseList>> courseSearch(CourseQuery req) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } req.setPageNum((req.getPageNum() - 1) * req.getPageSize()); if (StringUtils.hasLength(req.getTime())){ for (String s : req.getTime().split(",")) { @@ -2044,6 +2481,10 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header") }) public ResultUtil<List<Banner>> getBanner() { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } List<String> strings = new ArrayList<>(); strings.add("sort"); List<Banner> state = bannerService.selectList(new EntityWrapper<Banner>() @@ -2059,6 +2500,9 @@ }) public ResultUtil<SearchList> getList() { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } // 查询用户有哪些课程购买了的 List<OrderCourse> orderCourses = orderCourseService.selectList(new EntityWrapper<OrderCourse>() @@ -2080,17 +2524,29 @@ for (Order order1 : order) { for (String s : packageService.selectById(order1.getPackageId()) .getPositions().split(",")) { List<Integer> positionId = courseService.selectList(new EntityWrapper<Course>() .eq("positionId", s)).stream().map(Course::getId) List<Integer> cId = courseService.selectList(new EntityWrapper<Course>() .eq("positionId", s) .eq("state",1)).stream().map(Course::getId) .collect(Collectors.toList()); packages.addAll(positionId); packages.addAll(cId); } } packages = packages.stream().distinct().collect(Collectors.toList()); } course.addAll(packages); if (packages.size()==0){ packages.add(-1); } List<Integer> collect5 = courseService.selectList(new EntityWrapper<Course>() .eq("state", 1) .in("id", packages)).stream().map(Course::getId) .collect(Collectors.toList()); course.addAll(collect5); if (course.isEmpty()){ course.add(-1); } // 所有用户的课程ids List<Integer> collect = course.stream().distinct().collect(Collectors.toList()); // 查询包含的类型和部位 List<Integer> collect1 = courseService.selectList(new EntityWrapper<Course>() .in("id", collect).eq("state", 1)).stream().map(Course::getPositionId) @@ -2099,6 +2555,12 @@ .in("id", collect).eq("state", 1)).stream().map(Course::getTypeId) .collect(Collectors.toList()); List<String> strings = new ArrayList<>(); for (Integer i : collect1) { FitnessPosition fitnessPosition = fitnessPositionService.selectById(i); if (!strings.contains(fitnessPosition.getName())){ strings.add(fitnessPosition.getName()); } } List<FitnessPosition> fitnessPositions = new ArrayList<>(); List<DifficultyVO> d = new ArrayList<>(); List<DifficultyVO> t = new ArrayList<>(); @@ -2123,17 +2585,12 @@ for (FitnessPosition position : positions) { position.setIsUse(0); if (strings.contains(position.getName())){ continue; position.setIsUse(1); fitnessPositions.add(position); }else{ strings.add(position.getName()); fitnessPositions.add(position); } for (Integer integer : collect1) { if (position.getId().equals(integer)){ position.setIsUse(1); break; } } } List<FitnessType> types = fitnessTypeService.selectList(new EntityWrapper<FitnessType>() .eq("isDelete", 0)); @@ -2153,7 +2610,7 @@ .eq("state", 1) .in("id", collect)); // 获取所有课程的时间 List<String> collect4 = courses.stream().map(Course::getTime).distinct().collect(Collectors.toList()); List<String> collect4 = courses.stream().map(Course::getTime).collect(Collectors.toList()); for (String s : collect4) { Integer integer = Integer.valueOf(s); if (integer>1200){ @@ -2176,7 +2633,7 @@ } } // 获取所有的难度 List<Integer> collect3 = courses.stream().map(Course::getDifficulty).distinct().collect(Collectors.toList()); List<Integer> collect3 = courses.stream().map(Course::getDifficulty).collect(Collectors.toList()); if (collect3.contains(1)){ DifficultyVO difficultyVO = new DifficultyVO(); difficultyVO.setIsUse(1); @@ -2245,15 +2702,91 @@ searchList.setDifficulty(d); searchList.setTime(t); searchList.setFitnessPosition(fitnessPositions); Map<String, FitnessPosition> resultMap = new HashMap<>(); for (FitnessPosition position : fitnessPositions) { if (resultMap.containsKey(position.getName())) { FitnessPosition existingPosition = resultMap.get(position.getName()); if (existingPosition.getIsUse() == 0 && position.getIsUse() == 1) { existingPosition.setIsUse(1); } } else { resultMap.put(position.getName(), position); } } List<FitnessPosition> resultPositions = new ArrayList<>(resultMap.values()); searchList.setFitnessPosition(resultPositions); searchList.setFitnessType(types); return ResultUtil.success(searchList); } public static void main(String[] args) throws Exception { BigDecimal divisor = new BigDecimal("100"); BigDecimal res = new BigDecimal("0.8"); BigDecimal bigDecimal = res.divide(divisor); System.err.println(bigDecimal); public static void main(String[] args) { String t= "{\"signedPayload\":\"eyJhbGciOiJFUzI1NiIsIng1YyI6WyJNSUlFTURDQ0E3YWdBd0lCQWdJUWZUbGZkMGZOdkZXdnpDMVlJQU5zWGpBS0JnZ3Foa2pPUFFRREF6QjFNVVF3UWdZRFZRUURERHRCY0hCc1pTQlhiM0pzWkhkcFpHVWdSR1YyWld4dmNHVnlJRkpsYkdGMGFXOXVjeUJEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURUxNQWtHQTFVRUN3d0NSell4RXpBUkJnTlZCQW9NQ2tGd2NHeGxJRWx1WXk0eEN6QUpCZ05WQkFZVEFsVlRNQjRYRFRJek1Ea3hNakU1TlRFMU0xb1hEVEkxTVRBeE1URTVOVEUxTWxvd2daSXhRREErQmdOVkJBTU1OMUJ5YjJRZ1JVTkRJRTFoWXlCQmNIQWdVM1J2Y21VZ1lXNWtJR2xVZFc1bGN5QlRkRzl5WlNCU1pXTmxhWEIwSUZOcFoyNXBibWN4TERBcUJnTlZCQXNNSTBGd2NHeGxJRmR2Y214a2QybGtaU0JFWlhabGJHOXdaWElnVW1Wc1lYUnBiMjV6TVJNd0VRWURWUVFLREFwQmNIQnNaU0JKYm1NdU1Rc3dDUVlEVlFRR0V3SlZVekJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCRUZFWWUvSnFUcXlRdi9kdFhrYXVESENTY1YxMjlGWVJWLzB4aUIyNG5DUWt6UWYzYXNISk9OUjVyMFJBMGFMdko0MzJoeTFTWk1vdXZ5ZnBtMjZqWFNqZ2dJSU1JSUNCREFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRDh2bENOUjAxREptaWc5N2JCODVjK2xrR0taTUhBR0NDc0dBUVVGQndFQkJHUXdZakF0QmdnckJnRUZCUWN3QW9ZaGFIUjBjRG92TDJObGNuUnpMbUZ3Y0d4bExtTnZiUzkzZDJSeVp6WXVaR1Z5TURFR0NDc0dBUVVGQnpBQmhpVm9kSFJ3T2k4dmIyTnpjQzVoY0hCc1pTNWpiMjB2YjJOemNEQXpMWGQzWkhKbk5qQXlNSUlCSGdZRFZSMGdCSUlCRlRDQ0FSRXdnZ0VOQmdvcWhraUc5Mk5rQlFZQk1JSCtNSUhEQmdnckJnRUZCUWNDQWpDQnRneUJzMUpsYkdsaGJtTmxJRzl1SUhSb2FYTWdZMlZ5ZEdsbWFXTmhkR1VnWW5rZ1lXNTVJSEJoY25SNUlHRnpjM1Z0WlhNZ1lXTmpaWEIwWVc1alpTQnZaaUIwYUdVZ2RHaGxiaUJoY0hCc2FXTmhZbXhsSUhOMFlXNWtZWEprSUhSbGNtMXpJR0Z1WkNCamIyNWthWFJwYjI1eklHOW1JSFZ6WlN3Z1kyVnlkR2xtYVdOaGRHVWdjRzlzYVdONUlHRnVaQ0JqWlhKMGFXWnBZMkYwYVc5dUlIQnlZV04wYVdObElITjBZWFJsYldWdWRITXVNRFlHQ0NzR0FRVUZCd0lCRmlwb2RIUndPaTh2ZDNkM0xtRndjR3hsTG1OdmJTOWpaWEowYVdacFkyRjBaV0YxZEdodmNtbDBlUzh3SFFZRFZSME9CQllFRkFNczhQanM2VmhXR1FsekUyWk9FK0dYNE9vL01BNEdBMVVkRHdFQi93UUVBd0lIZ0RBUUJnb3Foa2lHOTJOa0Jnc0JCQUlGQURBS0JnZ3Foa2pPUFFRREF3Tm9BREJsQWpFQTh5Uk5kc2twNTA2REZkUExnaExMSndBdjVKOGhCR0xhSThERXhkY1BYK2FCS2pqTzhlVW85S3BmcGNOWVVZNVlBakFQWG1NWEVaTCtRMDJhZHJtbXNoTnh6M05uS20rb3VRd1U3dkJUbjBMdmxNN3ZwczJZc2xWVGFtUllMNGFTczVrPSIsIk1JSURGakNDQXB5Z0F3SUJBZ0lVSXNHaFJ3cDBjMm52VTRZU3ljYWZQVGp6Yk5jd0NnWUlLb1pJemowRUF3TXdaekViTUJrR0ExVUVBd3dTUVhCd2JHVWdVbTl2ZENCRFFTQXRJRWN6TVNZd0pBWURWUVFMREIxQmNIQnNaU0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURVRNQkVHQTFVRUNnd0tRWEJ3YkdVZ1NXNWpMakVMTUFrR0ExVUVCaE1DVlZNd0hoY05NakV3TXpFM01qQXpOekV3V2hjTk16WXdNekU1TURBd01EQXdXakIxTVVRd1FnWURWUVFERER0QmNIQnNaU0JYYjNKc1pIZHBaR1VnUkdWMlpXeHZjR1Z5SUZKbGJHRjBhVzl1Y3lCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlVEVMTUFrR0ExVUVDd3dDUnpZeEV6QVJCZ05WQkFvTUNrRndjR3hsSUVsdVl5NHhDekFKQmdOVkJBWVRBbFZUTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUVic1FLQzk0UHJsV21aWG5YZ3R4emRWSkw4VDBTR1luZ0RSR3BuZ24zTjZQVDhKTUViN0ZEaTRiQm1QaENuWjMvc3E2UEYvY0djS1hXc0w1dk90ZVJoeUo0NXgzQVNQN2NPQithYW85MGZjcHhTdi9FWkZibmlBYk5nWkdoSWhwSW80SDZNSUgzTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFBd0h3WURWUjBqQkJnd0ZvQVV1N0Rlb1ZnemlKcWtpcG5ldnIzcnI5ckxKS3N3UmdZSUt3WUJCUVVIQVFFRU9qQTRNRFlHQ0NzR0FRVUZCekFCaGlwb2RIUndPaTh2YjJOemNDNWhjSEJzWlM1amIyMHZiMk56Y0RBekxXRndjR3hsY205dmRHTmhaek13TndZRFZSMGZCREF3TGpBc29DcWdLSVltYUhSMGNEb3ZMMk55YkM1aGNIQnNaUzVqYjIwdllYQndiR1Z5YjI5MFkyRm5NeTVqY213d0hRWURWUjBPQkJZRUZEOHZsQ05SMDFESm1pZzk3YkI4NWMrbGtHS1pNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVFCZ29xaGtpRzkyTmtCZ0lCQkFJRkFEQUtCZ2dxaGtqT1BRUURBd05vQURCbEFqQkFYaFNxNUl5S29nTUNQdHc0OTBCYUI2NzdDYUVHSlh1ZlFCL0VxWkdkNkNTamlDdE9udU1UYlhWWG14eGN4ZmtDTVFEVFNQeGFyWlh2TnJreFUzVGtVTUkzM3l6dkZWVlJUNHd4V0pDOTk0T3NkY1o0K1JHTnNZRHlSNWdtZHIwbkRHZz0iLCJNSUlDUXpDQ0FjbWdBd0lCQWdJSUxjWDhpTkxGUzVVd0NnWUlLb1pJemowRUF3TXdaekViTUJrR0ExVUVBd3dTUVhCd2JHVWdVbTl2ZENCRFFTQXRJRWN6TVNZd0pBWURWUVFMREIxQmNIQnNaU0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURVRNQkVHQTFVRUNnd0tRWEJ3YkdVZ1NXNWpMakVMTUFrR0ExVUVCaE1DVlZNd0hoY05NVFF3TkRNd01UZ3hPVEEyV2hjTk16a3dORE13TVRneE9UQTJXakJuTVJzd0dRWURWUVFEREJKQmNIQnNaU0JTYjI5MElFTkJJQzBnUnpNeEpqQWtCZ05WQkFzTUhVRndjR3hsSUVObGNuUnBabWxqWVhScGIyNGdRWFYwYUc5eWFYUjVNUk13RVFZRFZRUUtEQXBCY0hCc1pTQkpibU11TVFzd0NRWURWUVFHRXdKVlV6QjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQkpqcEx6MUFjcVR0a3lKeWdSTWMzUkNWOGNXalRuSGNGQmJaRHVXbUJTcDNaSHRmVGpqVHV4eEV0WC8xSDdZeVlsM0o2WVJiVHpCUEVWb0EvVmhZREtYMUR5eE5CMGNUZGRxWGw1ZHZNVnp0SzUxN0lEdll1VlRaWHBta09sRUtNYU5DTUVBd0hRWURWUjBPQkJZRUZMdXczcUZZTTRpYXBJcVozcjY5NjYvYXl5U3JNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01Bb0dDQ3FHU000OUJBTURBMmdBTUdVQ01RQ0Q2Y0hFRmw0YVhUUVkyZTN2OUd3T0FFWkx1Tit5UmhIRkQvM21lb3locG12T3dnUFVuUFdUeG5TNGF0K3FJeFVDTUcxbWloREsxQTNVVDgyTlF6NjBpbU9sTTI3amJkb1h0MlFmeUZNbStZaGlkRGtMRjF2TFVhZ002QmdENTZLeUtBPT0iXX0.eyJub3RpZmljYXRpb25UeXBlIjoiT05FX1RJTUVfQ0hBUkdFIiwibm90aWZpY2F0aW9uVVVJRCI6IjhmMzFkZjhiLWJiNzMtNDY0NC05ODY3LWYwMzYzZWFiMjRkZSIsImRhdGEiOnsiYXBwQXBwbGVJZCI6NjQ5OTEyMzYyNywiYnVuZGxlSWQiOiJjb20uc2luYXRhLkpLRml0bmVzcyIsImJ1bmRsZVZlcnNpb24iOiIxMyIsImVudmlyb25tZW50IjoiU2FuZGJveCIsInNpZ25lZFRyYW5zYWN0aW9uSW5mbyI6ImV5SmhiR2NpT2lKRlV6STFOaUlzSW5nMVl5STZXeUpOU1VsRlRVUkRRMEUzWVdkQmQwbENRV2RKVVdaVWJHWmtNR1pPZGtaWGRucERNVmxKUVU1eldHcEJTMEpuWjNGb2EycFBVRkZSUkVGNlFqRk5WVkYzVVdkWlJGWlJVVVJFUkhSQ1kwaENjMXBUUWxoaU0wcHpXa2hrY0ZwSFZXZFNSMVl5V2xkNGRtTkhWbmxKUmtwc1lrZEdNR0ZYT1hWamVVSkVXbGhLTUdGWFduQlpNa1l3WVZjNWRVbEZSakZrUjJoMlkyMXNNR1ZVUlV4TlFXdEhRVEZWUlVOM2QwTlNlbGw0UlhwQlVrSm5UbFpDUVc5TlEydEdkMk5IZUd4SlJXeDFXWGswZUVONlFVcENaMDVXUWtGWlZFRnNWbFJOUWpSWVJGUkplazFFYTNoTmFrVTFUbFJGTVUweGIxaEVWRWt4VFZSQmVFMVVSVFZPVkVVeFRXeHZkMmRhU1hoUlJFRXJRbWRPVmtKQlRVMU9NVUo1WWpKUloxSlZUa1JKUlRGb1dYbENRbU5JUVdkVk0xSjJZMjFWWjFsWE5XdEpSMnhWWkZjMWJHTjVRbFJrUnpsNVdsTkNVMXBYVG14aFdFSXdTVVpPY0ZveU5YQmliV040VEVSQmNVSm5UbFpDUVhOTlNUQkdkMk5IZUd4SlJtUjJZMjE0YTJReWJHdGFVMEpGV2xoYWJHSkhPWGRhV0VsblZXMVdjMWxZVW5CaU1qVjZUVkpOZDBWUldVUldVVkZMUkVGd1FtTklRbk5hVTBKS1ltMU5kVTFSYzNkRFVWbEVWbEZSUjBWM1NsWlZla0phVFVKTlIwSjVjVWRUVFRRNVFXZEZSME5EY1VkVFRUUTVRWGRGU0VFd1NVRkNSVVpGV1dVdlNuRlVjWGxSZGk5a2RGaHJZWFZFU0VOVFkxWXhNamxHV1ZKV0x6QjRhVUl5Tkc1RFVXdDZVV1l6WVhOSVNrOU9ValZ5TUZKQk1HRk1ka28wTXpKb2VURlRXazF2ZFhaNVpuQnRNalpxV0ZOcVoyZEpTVTFKU1VOQ1JFRk5RbWRPVmtoU1RVSkJaamhGUVdwQlFVMUNPRWRCTVZWa1NYZFJXVTFDWVVGR1JEaDJiRU5PVWpBeFJFcHRhV2M1TjJKQ09EVmpLMnhyUjB0YVRVaEJSME5EYzBkQlVWVkdRbmRGUWtKSFVYZFpha0YwUW1kbmNrSm5SVVpDVVdOM1FXOVphR0ZJVWpCalJHOTJUREpPYkdOdVVucE1iVVozWTBkNGJFeHRUblppVXprelpESlNlVnA2V1hWYVIxWjVUVVJGUjBORGMwZEJVVlZHUW5wQlFtaHBWbTlrU0ZKM1QyazRkbUl5VG5walF6Vm9ZMGhDYzFwVE5XcGlNakIyWWpKT2VtTkVRWHBNV0dReldraEtiazVxUVhsTlNVbENTR2RaUkZaU01HZENTVWxDUmxSRFEwRlNSWGRuWjBWT1FtZHZjV2hyYVVjNU1rNXJRbEZaUWsxSlNDdE5TVWhFUW1kbmNrSm5SVVpDVVdORFFXcERRblJuZVVKek1VcHNZa2RzYUdKdFRteEpSemwxU1VoU2IyRllUV2RaTWxaNVpFZHNiV0ZYVG1oa1IxVm5XVzVyWjFsWE5UVkpTRUpvWTI1U05VbEhSbnBqTTFaMFdsaE5aMWxYVG1wYVdFSXdXVmMxYWxwVFFuWmFhVUl3WVVkVloyUkhhR3hpYVVKb1kwaENjMkZYVG1oWmJYaHNTVWhPTUZsWE5XdFpXRXByU1VoU2JHTnRNWHBKUjBaMVdrTkNhbUl5Tld0aFdGSndZakkxZWtsSE9XMUpTRlo2V2xOM1oxa3lWbmxrUjJ4dFlWZE9hR1JIVldkalJ6bHpZVmRPTlVsSFJuVmFRMEpxV2xoS01HRlhXbkJaTWtZd1lWYzVkVWxJUW5sWlYwNHdZVmRPYkVsSVRqQlpXRkpzWWxkV2RXUklUWFZOUkZsSFEwTnpSMEZSVlVaQ2QwbENSbWx3YjJSSVVuZFBhVGgyWkROa00weHRSbmRqUjNoc1RHMU9kbUpUT1dwYVdFb3dZVmRhY0ZreVJqQmFWMFl4WkVkb2RtTnRiREJsVXpoM1NGRlpSRlpTTUU5Q1FsbEZSa0ZOY3poUWFuTTJWbWhYUjFGc2VrVXlXazlGSzBkWU5FOXZMMDFCTkVkQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlVVSm5iM0ZvYTJsSE9USk9hMEpuYzBKQ1FVbEdRVVJCUzBKblozRm9hMnBQVUZGUlJFRjNUbTlCUkVKc1FXcEZRVGg1VWs1a2MydHdOVEEyUkVaa1VFeG5hRXhNU25kQmRqVktPR2hDUjB4aFNUaEVSWGhrWTFCWUsyRkNTMnBxVHpobFZXODVTM0JtY0dOT1dWVlpOVmxCYWtGUVdHMU5XRVZhVEN0Uk1ESmhaSEp0YlhOb1RuaDZNMDV1UzIwcmIzVlJkMVUzZGtKVWJqQk1kbXhOTjNad2N6SlpjMnhXVkdGdFVsbE1OR0ZUY3pWclBTSXNJazFKU1VSR2FrTkRRWEI1WjBGM1NVSkJaMGxWU1hOSGFGSjNjREJqTW01MlZUUlpVM2xqWVdaUVZHcDZZazVqZDBObldVbExiMXBKZW1vd1JVRjNUWGRhZWtWaVRVSnJSMEV4VlVWQmQzZFRVVmhDZDJKSFZXZFZiVGwyWkVOQ1JGRlRRWFJKUldONlRWTlpkMHBCV1VSV1VWRk1SRUl4UW1OSVFuTmFVMEpFV2xoS01HRlhXbkJaTWtZd1lWYzVkVWxGUmpGa1IyaDJZMjFzTUdWVVJWUk5Ra1ZIUVRGVlJVTm5kMHRSV0VKM1lrZFZaMU5YTldwTWFrVk1UVUZyUjBFeFZVVkNhRTFEVmxaTmQwaG9ZMDVOYWtWM1RYcEZNMDFxUVhwT2VrVjNWMmhqVGsxNldYZE5la1UxVFVSQmQwMUVRWGRYYWtJeFRWVlJkMUZuV1VSV1VWRkVSRVIwUW1OSVFuTmFVMEpZWWpOS2MxcElaSEJhUjFWblVrZFdNbHBYZUhaalIxWjVTVVpLYkdKSFJqQmhWemwxWTNsQ1JGcFlTakJoVjFwd1dUSkdNR0ZYT1hWSlJVWXhaRWRvZG1OdGJEQmxWRVZNVFVGclIwRXhWVVZEZDNkRFVucFplRVY2UVZKQ1owNVdRa0Z2VFVOclJuZGpSM2hzU1VWc2RWbDVOSGhEZWtGS1FtZE9Wa0pCV1ZSQmJGWlVUVWhaZDBWQldVaExiMXBKZW1vd1EwRlJXVVpMTkVWRlFVTkpSRmxuUVVWaWMxRkxRemswVUhKc1YyMWFXRzVZWjNSNGVtUldTa3c0VkRCVFIxbHVaMFJTUjNCdVoyNHpUalpRVkRoS1RVVmlOMFpFYVRSaVFtMVFhRU51V2pNdmMzRTJVRVl2WTBkalMxaFhjMHcxZGs5MFpWSm9lVW8wTlhnelFWTlFOMk5QUWl0aFlXODVNR1pqY0hoVGRpOUZXa1ppYm1sQllrNW5Xa2RvU1dod1NXODBTRFpOU1VnelRVSkpSMEV4VldSRmQwVkNMM2RSU1UxQldVSkJaamhEUVZGQmQwaDNXVVJXVWpCcVFrSm5kMFp2UVZWMU4wUmxiMVpuZW1sS2NXdHBjRzVsZG5JemNuSTVja3hLUzNOM1VtZFpTVXQzV1VKQ1VWVklRVkZGUlU5cVFUUk5SRmxIUTBOelIwRlJWVVpDZWtGQ2FHbHdiMlJJVW5kUGFUaDJZakpPZW1ORE5XaGpTRUp6V2xNMWFtSXlNSFppTWs1NlkwUkJla3hYUm5kalIzaHNZMjA1ZG1SSFRtaGFlazEzVG5kWlJGWlNNR1pDUkVGM1RHcEJjMjlEY1dkTFNWbHRZVWhTTUdORWIzWk1NazU1WWtNMWFHTklRbk5hVXpWcVlqSXdkbGxZUW5kaVIxWjVZakk1TUZreVJtNU5lVFZxWTIxM2QwaFJXVVJXVWpCUFFrSlpSVVpFT0hac1EwNVNNREZFU20xcFp6azNZa0k0TldNcmJHdEhTMXBOUVRSSFFURlZaRVIzUlVJdmQxRkZRWGRKUWtKcVFWRkNaMjl4YUd0cFJ6a3lUbXRDWjBsQ1FrRkpSa0ZFUVV0Q1oyZHhhR3RxVDFCUlVVUkJkMDV2UVVSQ2JFRnFRa0ZZYUZOeE5VbDVTMjluVFVOUWRIYzBPVEJDWVVJMk56ZERZVVZIU2xoMVpsRkNMMFZ4V2tka05rTlRhbWxEZEU5dWRVMVVZbGhXV0cxNGVHTjRabXREVFZGRVZGTlFlR0Z5V2xoMlRuSnJlRlV6Vkd0VlRVa3pNM2w2ZGtaV1ZsSlVOSGQ0VjBwRE9UazBUM05rWTFvMEsxSkhUbk5aUkhsU05XZHRaSEl3YmtSSFp6MGlMQ0pOU1VsRFVYcERRMEZqYldkQmQwbENRV2RKU1V4aldEaHBUa3hHVXpWVmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhkYWVrVmlUVUpyUjBFeFZVVkJkM2RUVVZoQ2QySkhWV2RWYlRsMlpFTkNSRkZUUVhSSlJXTjZUVk5aZDBwQldVUldVVkZNUkVJeFFtTklRbk5hVTBKRVdsaEtNR0ZYV25CWk1rWXdZVmM1ZFVsRlJqRmtSMmgyWTIxc01HVlVSVlJOUWtWSFFURlZSVU5uZDB0UldFSjNZa2RWWjFOWE5XcE1ha1ZNVFVGclIwRXhWVVZDYUUxRFZsWk5kMGhvWTA1TlZGRjNUa1JOZDAxVVozaFBWRUV5VjJoalRrMTZhM2RPUkUxM1RWUm5lRTlVUVRKWGFrSnVUVkp6ZDBkUldVUldVVkZFUkVKS1FtTklRbk5hVTBKVFlqSTVNRWxGVGtKSlF6Qm5VbnBOZUVwcVFXdENaMDVXUWtGelRVaFZSbmRqUjNoc1NVVk9iR051VW5CYWJXeHFXVmhTY0dJeU5HZFJXRll3WVVjNWVXRllValZOVWsxM1JWRlpSRlpSVVV0RVFYQkNZMGhDYzFwVFFrcGliVTExVFZGemQwTlJXVVJXVVZGSFJYZEtWbFY2UWpKTlFrRkhRbmx4UjFOTk5EbEJaMFZIUWxOMVFrSkJRV2xCTWtsQlFrcHFjRXg2TVVGamNWUjBhM2xLZVdkU1RXTXpVa05XT0dOWGFsUnVTR05HUW1KYVJIVlhiVUpUY0ROYVNIUm1WR3BxVkhWNGVFVjBXQzh4U0RkWmVWbHNNMG8yV1ZKaVZIcENVRVZXYjBFdlZtaFpSRXRZTVVSNWVFNUNNR05VWkdSeFdHdzFaSFpOVm5wMFN6VXhOMGxFZGxsMVZsUmFXSEJ0YTA5c1JVdE5ZVTVEVFVWQmQwaFJXVVJXVWpCUFFrSlpSVVpNZFhjemNVWlpUVFJwWVhCSmNWb3pjalk1TmpZdllYbDVVM0pOUVRoSFFURlZaRVYzUlVJdmQxRkdUVUZOUWtGbU9IZEVaMWxFVmxJd1VFRlJTQzlDUVZGRVFXZEZSMDFCYjBkRFEzRkhVMDAwT1VKQlRVUkJNbWRCVFVkVlEwMVJRMFEyWTBoRlJtdzBZVmhVVVZreVpUTjJPVWQzVDBGRldreDFUaXQ1VW1oSVJrUXZNMjFsYjNsb2NHMTJUM2RuVUZWdVVGZFVlRzVUTkdGMEszRkplRlZEVFVjeGJXbG9SRXN4UVROVlZEZ3lUbEY2TmpCcGJVOXNUVEkzYW1Ka2IxaDBNbEZtZVVaTmJTdFphR2xrUkd0TVJqRjJURlZoWjAwMlFtZEVOVFpMZVV0QlBUMGlYWDAuZXlKMGNtRnVjMkZqZEdsdmJrbGtJam9pTWpBd01EQXdNRFkyTXpRM05qY3lOaUlzSW05eWFXZHBibUZzVkhKaGJuTmhZM1JwYjI1SlpDSTZJakl3TURBd01EQTJOak0wTnpZM01qWWlMQ0ppZFc1a2JHVkpaQ0k2SW1OdmJTNXphVzVoZEdFdVNrdEdhWFJ1WlhOeklpd2ljSEp2WkhWamRFbGtJam9pWTI5dExtcHJabWwwYm1WemN5NWhMbkJ5YVdObExqRWlMQ0p3ZFhKamFHRnpaVVJoZEdVaU9qRTNNakUyTlRBM056SXdNREFzSW05eWFXZHBibUZzVUhWeVkyaGhjMlZFWVhSbElqb3hOekl4TmpVd056Y3lNREF3TENKeGRXRnVkR2wwZVNJNk1Td2lkSGx3WlNJNklrTnZibk4xYldGaWJHVWlMQ0pwYmtGd2NFOTNibVZ5YzJocGNGUjVjR1VpT2lKUVZWSkRTRUZUUlVRaUxDSnphV2R1WldSRVlYUmxJam94TnpJeE5qVXdOemt4TWpRM0xDSmxiblpwY205dWJXVnVkQ0k2SWxOaGJtUmliM2dpTENKMGNtRnVjMkZqZEdsdmJsSmxZWE52YmlJNklsQlZVa05JUVZORklpd2ljM1J2Y21WbWNtOXVkQ0k2SWtOSVRpSXNJbk4wYjNKbFpuSnZiblJKWkNJNklqRTBNelEyTlNJc0luQnlhV05sSWpvNU9EQXdNQ3dpWTNWeWNtVnVZM2tpT2lKRFRsa2lmUS5ES3JibWNYZkNGSDBadlJBNlZXWGkzLWN6cC03WHptTjhIM25PRUs4UnZxUFRXZ3VFYThqWUxhWHU5dHBLc1lQWlNvV0d4NHFXUy1nVXFMVFV1bXNlZyJ9LCJ2ZXJzaW9uIjoiMi4wIiwic2lnbmVkRGF0ZSI6MTcyMTY1MDc5MTI2OX0.imD544tZ0FLw4lPrcpRB279O_SpRab_6z5aUJRoPoe_3CzhT4pwonOmM74PYItQQwpMYwB79SCQaCVVLMsPV1w\"}"; org.json.JSONObject jsonObject = new org.json.JSONObject(t); System.err.println(jsonObject.getString("signedPayload")); } // public static void main(String[] args) throws CertificateException { // try { // JSONObject payload = verifyAndGet("eyJhbGciOiJFUzI1NiIsIng1YyI6WyJNSUlFTURDQ0E3YWdBd0lCQWdJUWZUbGZkMGZOdkZXdnpDMVlJQU5zWGpBS0JnZ3Foa2pPUFFRREF6QjFNVVF3UWdZRFZRUURERHRCY0hCc1pTQlhiM0pzWkhkcFpHVWdSR1YyWld4dmNHVnlJRkpsYkdGMGFXOXVjeUJEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURUxNQWtHQTFVRUN3d0NSell4RXpBUkJnTlZCQW9NQ2tGd2NHeGxJRWx1WXk0eEN6QUpCZ05WQkFZVEFsVlRNQjRYRFRJek1Ea3hNakU1TlRFMU0xb1hEVEkxTVRBeE1URTVOVEUxTWxvd2daSXhRREErQmdOVkJBTU1OMUJ5YjJRZ1JVTkRJRTFoWXlCQmNIQWdVM1J2Y21VZ1lXNWtJR2xVZFc1bGN5QlRkRzl5WlNCU1pXTmxhWEIwSUZOcFoyNXBibWN4TERBcUJnTlZCQXNNSTBGd2NHeGxJRmR2Y214a2QybGtaU0JFWlhabGJHOXdaWElnVW1Wc1lYUnBiMjV6TVJNd0VRWURWUVFLREFwQmNIQnNaU0JKYm1NdU1Rc3dDUVlEVlFRR0V3SlZVekJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCRUZFWWUvSnFUcXlRdi9kdFhrYXVESENTY1YxMjlGWVJWLzB4aUIyNG5DUWt6UWYzYXNISk9OUjVyMFJBMGFMdko0MzJoeTFTWk1vdXZ5ZnBtMjZqWFNqZ2dJSU1JSUNCREFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRDh2bENOUjAxREptaWc5N2JCODVjK2xrR0taTUhBR0NDc0dBUVVGQndFQkJHUXdZakF0QmdnckJnRUZCUWN3QW9ZaGFIUjBjRG92TDJObGNuUnpMbUZ3Y0d4bExtTnZiUzkzZDJSeVp6WXVaR1Z5TURFR0NDc0dBUVVGQnpBQmhpVm9kSFJ3T2k4dmIyTnpjQzVoY0hCc1pTNWpiMjB2YjJOemNEQXpMWGQzWkhKbk5qQXlNSUlCSGdZRFZSMGdCSUlCRlRDQ0FSRXdnZ0VOQmdvcWhraUc5Mk5rQlFZQk1JSCtNSUhEQmdnckJnRUZCUWNDQWpDQnRneUJzMUpsYkdsaGJtTmxJRzl1SUhSb2FYTWdZMlZ5ZEdsbWFXTmhkR1VnWW5rZ1lXNTVJSEJoY25SNUlHRnpjM1Z0WlhNZ1lXTmpaWEIwWVc1alpTQnZaaUIwYUdVZ2RHaGxiaUJoY0hCc2FXTmhZbXhsSUhOMFlXNWtZWEprSUhSbGNtMXpJR0Z1WkNCamIyNWthWFJwYjI1eklHOW1JSFZ6WlN3Z1kyVnlkR2xtYVdOaGRHVWdjRzlzYVdONUlHRnVaQ0JqWlhKMGFXWnBZMkYwYVc5dUlIQnlZV04wYVdObElITjBZWFJsYldWdWRITXVNRFlHQ0NzR0FRVUZCd0lCRmlwb2RIUndPaTh2ZDNkM0xtRndjR3hsTG1OdmJTOWpaWEowYVdacFkyRjBaV0YxZEdodmNtbDBlUzh3SFFZRFZSME9CQllFRkFNczhQanM2VmhXR1FsekUyWk9FK0dYNE9vL01BNEdBMVVkRHdFQi93UUVBd0lIZ0RBUUJnb3Foa2lHOTJOa0Jnc0JCQUlGQURBS0JnZ3Foa2pPUFFRREF3Tm9BREJsQWpFQTh5Uk5kc2twNTA2REZkUExnaExMSndBdjVKOGhCR0xhSThERXhkY1BYK2FCS2pqTzhlVW85S3BmcGNOWVVZNVlBakFQWG1NWEVaTCtRMDJhZHJtbXNoTnh6M05uS20rb3VRd1U3dkJUbjBMdmxNN3ZwczJZc2xWVGFtUllMNGFTczVrPSIsIk1JSURGakNDQXB5Z0F3SUJBZ0lVSXNHaFJ3cDBjMm52VTRZU3ljYWZQVGp6Yk5jd0NnWUlLb1pJemowRUF3TXdaekViTUJrR0ExVUVBd3dTUVhCd2JHVWdVbTl2ZENCRFFTQXRJRWN6TVNZd0pBWURWUVFMREIxQmNIQnNaU0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURVRNQkVHQTFVRUNnd0tRWEJ3YkdVZ1NXNWpMakVMTUFrR0ExVUVCaE1DVlZNd0hoY05NakV3TXpFM01qQXpOekV3V2hjTk16WXdNekU1TURBd01EQXdXakIxTVVRd1FnWURWUVFERER0QmNIQnNaU0JYYjNKc1pIZHBaR1VnUkdWMlpXeHZjR1Z5SUZKbGJHRjBhVzl1Y3lCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlVEVMTUFrR0ExVUVDd3dDUnpZeEV6QVJCZ05WQkFvTUNrRndjR3hsSUVsdVl5NHhDekFKQmdOVkJBWVRBbFZUTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUVic1FLQzk0UHJsV21aWG5YZ3R4emRWSkw4VDBTR1luZ0RSR3BuZ24zTjZQVDhKTUViN0ZEaTRiQm1QaENuWjMvc3E2UEYvY0djS1hXc0w1dk90ZVJoeUo0NXgzQVNQN2NPQithYW85MGZjcHhTdi9FWkZibmlBYk5nWkdoSWhwSW80SDZNSUgzTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFBd0h3WURWUjBqQkJnd0ZvQVV1N0Rlb1ZnemlKcWtpcG5ldnIzcnI5ckxKS3N3UmdZSUt3WUJCUVVIQVFFRU9qQTRNRFlHQ0NzR0FRVUZCekFCaGlwb2RIUndPaTh2YjJOemNDNWhjSEJzWlM1amIyMHZiMk56Y0RBekxXRndjR3hsY205dmRHTmhaek13TndZRFZSMGZCREF3TGpBc29DcWdLSVltYUhSMGNEb3ZMMk55YkM1aGNIQnNaUzVqYjIwdllYQndiR1Z5YjI5MFkyRm5NeTVqY213d0hRWURWUjBPQkJZRUZEOHZsQ05SMDFESm1pZzk3YkI4NWMrbGtHS1pNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVFCZ29xaGtpRzkyTmtCZ0lCQkFJRkFEQUtCZ2dxaGtqT1BRUURBd05vQURCbEFqQkFYaFNxNUl5S29nTUNQdHc0OTBCYUI2NzdDYUVHSlh1ZlFCL0VxWkdkNkNTamlDdE9udU1UYlhWWG14eGN4ZmtDTVFEVFNQeGFyWlh2TnJreFUzVGtVTUkzM3l6dkZWVlJUNHd4V0pDOTk0T3NkY1o0K1JHTnNZRHlSNWdtZHIwbkRHZz0iLCJNSUlDUXpDQ0FjbWdBd0lCQWdJSUxjWDhpTkxGUzVVd0NnWUlLb1pJemowRUF3TXdaekViTUJrR0ExVUVBd3dTUVhCd2JHVWdVbTl2ZENCRFFTQXRJRWN6TVNZd0pBWURWUVFMREIxQmNIQnNaU0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURVRNQkVHQTFVRUNnd0tRWEJ3YkdVZ1NXNWpMakVMTUFrR0ExVUVCaE1DVlZNd0hoY05NVFF3TkRNd01UZ3hPVEEyV2hjTk16a3dORE13TVRneE9UQTJXakJuTVJzd0dRWURWUVFEREJKQmNIQnNaU0JTYjI5MElFTkJJQzBnUnpNeEpqQWtCZ05WQkFzTUhVRndjR3hsSUVObGNuUnBabWxqWVhScGIyNGdRWFYwYUc5eWFYUjVNUk13RVFZRFZRUUtEQXBCY0hCc1pTQkpibU11TVFzd0NRWURWUVFHRXdKVlV6QjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQkpqcEx6MUFjcVR0a3lKeWdSTWMzUkNWOGNXalRuSGNGQmJaRHVXbUJTcDNaSHRmVGpqVHV4eEV0WC8xSDdZeVlsM0o2WVJiVHpCUEVWb0EvVmhZREtYMUR5eE5CMGNUZGRxWGw1ZHZNVnp0SzUxN0lEdll1VlRaWHBta09sRUtNYU5DTUVBd0hRWURWUjBPQkJZRUZMdXczcUZZTTRpYXBJcVozcjY5NjYvYXl5U3JNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01Bb0dDQ3FHU000OUJBTURBMmdBTUdVQ01RQ0Q2Y0hFRmw0YVhUUVkyZTN2OUd3T0FFWkx1Tit5UmhIRkQvM21lb3locG12T3dnUFVuUFdUeG5TNGF0K3FJeFVDTUcxbWloREsxQTNVVDgyTlF6NjBpbU9sTTI3amJkb1h0MlFmeUZNbStZaGlkRGtMRjF2TFVhZ002QmdENTZLeUtBPT0iXX0.eyJub3RpZmljYXRpb25UeXBlIjoiT05FX1RJTUVfQ0hBUkdFIiwibm90aWZpY2F0aW9uVVVJRCI6ImFkMGEyODJiLWI0ZmEtNGE5ZS05YTk3LWEzYjZiNTQ2NWQ1OCIsImRhdGEiOnsiYXBwQXBwbGVJZCI6NjQ5OTEyMzYyNywiYnVuZGxlSWQiOiJjb20uc2luYXRhLkpLRml0bmVzcyIsImJ1bmRsZVZlcnNpb24iOiIxMyIsImVudmlyb25tZW50IjoiU2FuZGJveCIsInNpZ25lZFRyYW5zYWN0aW9uSW5mbyI6ImV5SmhiR2NpT2lKRlV6STFOaUlzSW5nMVl5STZXeUpOU1VsRlRVUkRRMEUzWVdkQmQwbENRV2RKVVdaVWJHWmtNR1pPZGtaWGRucERNVmxKUVU1eldHcEJTMEpuWjNGb2EycFBVRkZSUkVGNlFqRk5WVkYzVVdkWlJGWlJVVVJFUkhSQ1kwaENjMXBUUWxoaU0wcHpXa2hrY0ZwSFZXZFNSMVl5V2xkNGRtTkhWbmxKUmtwc1lrZEdNR0ZYT1hWamVVSkVXbGhLTUdGWFduQlpNa1l3WVZjNWRVbEZSakZrUjJoMlkyMXNNR1ZVUlV4TlFXdEhRVEZWUlVOM2QwTlNlbGw0UlhwQlVrSm5UbFpDUVc5TlEydEdkMk5IZUd4SlJXeDFXWGswZUVONlFVcENaMDVXUWtGWlZFRnNWbFJOUWpSWVJGUkplazFFYTNoTmFrVTFUbFJGTVUweGIxaEVWRWt4VFZSQmVFMVVSVFZPVkVVeFRXeHZkMmRhU1hoUlJFRXJRbWRPVmtKQlRVMU9NVUo1WWpKUloxSlZUa1JKUlRGb1dYbENRbU5JUVdkVk0xSjJZMjFWWjFsWE5XdEpSMnhWWkZjMWJHTjVRbFJrUnpsNVdsTkNVMXBYVG14aFdFSXdTVVpPY0ZveU5YQmliV040VEVSQmNVSm5UbFpDUVhOTlNUQkdkMk5IZUd4SlJtUjJZMjE0YTJReWJHdGFVMEpGV2xoYWJHSkhPWGRhV0VsblZXMVdjMWxZVW5CaU1qVjZUVkpOZDBWUldVUldVVkZMUkVGd1FtTklRbk5hVTBKS1ltMU5kVTFSYzNkRFVWbEVWbEZSUjBWM1NsWlZla0phVFVKTlIwSjVjVWRUVFRRNVFXZEZSME5EY1VkVFRUUTVRWGRGU0VFd1NVRkNSVVpGV1dVdlNuRlVjWGxSZGk5a2RGaHJZWFZFU0VOVFkxWXhNamxHV1ZKV0x6QjRhVUl5Tkc1RFVXdDZVV1l6WVhOSVNrOU9ValZ5TUZKQk1HRk1ka28wTXpKb2VURlRXazF2ZFhaNVpuQnRNalpxV0ZOcVoyZEpTVTFKU1VOQ1JFRk5RbWRPVmtoU1RVSkJaamhGUVdwQlFVMUNPRWRCTVZWa1NYZFJXVTFDWVVGR1JEaDJiRU5PVWpBeFJFcHRhV2M1TjJKQ09EVmpLMnhyUjB0YVRVaEJSME5EYzBkQlVWVkdRbmRGUWtKSFVYZFpha0YwUW1kbmNrSm5SVVpDVVdOM1FXOVphR0ZJVWpCalJHOTJUREpPYkdOdVVucE1iVVozWTBkNGJFeHRUblppVXprelpESlNlVnA2V1hWYVIxWjVUVVJGUjBORGMwZEJVVlZHUW5wQlFtaHBWbTlrU0ZKM1QyazRkbUl5VG5walF6Vm9ZMGhDYzFwVE5XcGlNakIyWWpKT2VtTkVRWHBNV0dReldraEtiazVxUVhsTlNVbENTR2RaUkZaU01HZENTVWxDUmxSRFEwRlNSWGRuWjBWT1FtZHZjV2hyYVVjNU1rNXJRbEZaUWsxSlNDdE5TVWhFUW1kbmNrSm5SVVpDVVdORFFXcERRblJuZVVKek1VcHNZa2RzYUdKdFRteEpSemwxU1VoU2IyRllUV2RaTWxaNVpFZHNiV0ZYVG1oa1IxVm5XVzVyWjFsWE5UVkpTRUpvWTI1U05VbEhSbnBqTTFaMFdsaE5aMWxYVG1wYVdFSXdXVmMxYWxwVFFuWmFhVUl3WVVkVloyUkhhR3hpYVVKb1kwaENjMkZYVG1oWmJYaHNTVWhPTUZsWE5XdFpXRXByU1VoU2JHTnRNWHBKUjBaMVdrTkNhbUl5Tld0aFdGSndZakkxZWtsSE9XMUpTRlo2V2xOM1oxa3lWbmxrUjJ4dFlWZE9hR1JIVldkalJ6bHpZVmRPTlVsSFJuVmFRMEpxV2xoS01HRlhXbkJaTWtZd1lWYzVkVWxJUW5sWlYwNHdZVmRPYkVsSVRqQlpXRkpzWWxkV2RXUklUWFZOUkZsSFEwTnpSMEZSVlVaQ2QwbENSbWx3YjJSSVVuZFBhVGgyWkROa00weHRSbmRqUjNoc1RHMU9kbUpUT1dwYVdFb3dZVmRhY0ZreVJqQmFWMFl4WkVkb2RtTnRiREJsVXpoM1NGRlpSRlpTTUU5Q1FsbEZSa0ZOY3poUWFuTTJWbWhYUjFGc2VrVXlXazlGSzBkWU5FOXZMMDFCTkVkQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlVVSm5iM0ZvYTJsSE9USk9hMEpuYzBKQ1FVbEdRVVJCUzBKblozRm9hMnBQVUZGUlJFRjNUbTlCUkVKc1FXcEZRVGg1VWs1a2MydHdOVEEyUkVaa1VFeG5hRXhNU25kQmRqVktPR2hDUjB4aFNUaEVSWGhrWTFCWUsyRkNTMnBxVHpobFZXODVTM0JtY0dOT1dWVlpOVmxCYWtGUVdHMU5XRVZhVEN0Uk1ESmhaSEp0YlhOb1RuaDZNMDV1UzIwcmIzVlJkMVUzZGtKVWJqQk1kbXhOTjNad2N6SlpjMnhXVkdGdFVsbE1OR0ZUY3pWclBTSXNJazFKU1VSR2FrTkRRWEI1WjBGM1NVSkJaMGxWU1hOSGFGSjNjREJqTW01MlZUUlpVM2xqWVdaUVZHcDZZazVqZDBObldVbExiMXBKZW1vd1JVRjNUWGRhZWtWaVRVSnJSMEV4VlVWQmQzZFRVVmhDZDJKSFZXZFZiVGwyWkVOQ1JGRlRRWFJKUldONlRWTlpkMHBCV1VSV1VWRk1SRUl4UW1OSVFuTmFVMEpFV2xoS01HRlhXbkJaTWtZd1lWYzVkVWxGUmpGa1IyaDJZMjFzTUdWVVJWUk5Ra1ZIUVRGVlJVTm5kMHRSV0VKM1lrZFZaMU5YTldwTWFrVk1UVUZyUjBFeFZVVkNhRTFEVmxaTmQwaG9ZMDVOYWtWM1RYcEZNMDFxUVhwT2VrVjNWMmhqVGsxNldYZE5la1UxVFVSQmQwMUVRWGRYYWtJeFRWVlJkMUZuV1VSV1VWRkVSRVIwUW1OSVFuTmFVMEpZWWpOS2MxcElaSEJhUjFWblVrZFdNbHBYZUhaalIxWjVTVVpLYkdKSFJqQmhWemwxWTNsQ1JGcFlTakJoVjFwd1dUSkdNR0ZYT1hWSlJVWXhaRWRvZG1OdGJEQmxWRVZNVFVGclIwRXhWVVZEZDNkRFVucFplRVY2UVZKQ1owNVdRa0Z2VFVOclJuZGpSM2hzU1VWc2RWbDVOSGhEZWtGS1FtZE9Wa0pCV1ZSQmJGWlVUVWhaZDBWQldVaExiMXBKZW1vd1EwRlJXVVpMTkVWRlFVTkpSRmxuUVVWaWMxRkxRemswVUhKc1YyMWFXRzVZWjNSNGVtUldTa3c0VkRCVFIxbHVaMFJTUjNCdVoyNHpUalpRVkRoS1RVVmlOMFpFYVRSaVFtMVFhRU51V2pNdmMzRTJVRVl2WTBkalMxaFhjMHcxZGs5MFpWSm9lVW8wTlhnelFWTlFOMk5QUWl0aFlXODVNR1pqY0hoVGRpOUZXa1ppYm1sQllrNW5Xa2RvU1dod1NXODBTRFpOU1VnelRVSkpSMEV4VldSRmQwVkNMM2RSU1UxQldVSkJaamhEUVZGQmQwaDNXVVJXVWpCcVFrSm5kMFp2UVZWMU4wUmxiMVpuZW1sS2NXdHBjRzVsZG5JemNuSTVja3hLUzNOM1VtZFpTVXQzV1VKQ1VWVklRVkZGUlU5cVFUUk5SRmxIUTBOelIwRlJWVVpDZWtGQ2FHbHdiMlJJVW5kUGFUaDJZakpPZW1ORE5XaGpTRUp6V2xNMWFtSXlNSFppTWs1NlkwUkJla3hYUm5kalIzaHNZMjA1ZG1SSFRtaGFlazEzVG5kWlJGWlNNR1pDUkVGM1RHcEJjMjlEY1dkTFNWbHRZVWhTTUdORWIzWk1NazU1WWtNMWFHTklRbk5hVXpWcVlqSXdkbGxZUW5kaVIxWjVZakk1TUZreVJtNU5lVFZxWTIxM2QwaFJXVVJXVWpCUFFrSlpSVVpFT0hac1EwNVNNREZFU20xcFp6azNZa0k0TldNcmJHdEhTMXBOUVRSSFFURlZaRVIzUlVJdmQxRkZRWGRKUWtKcVFWRkNaMjl4YUd0cFJ6a3lUbXRDWjBsQ1FrRkpSa0ZFUVV0Q1oyZHhhR3RxVDFCUlVVUkJkMDV2UVVSQ2JFRnFRa0ZZYUZOeE5VbDVTMjluVFVOUWRIYzBPVEJDWVVJMk56ZERZVVZIU2xoMVpsRkNMMFZ4V2tka05rTlRhbWxEZEU5dWRVMVVZbGhXV0cxNGVHTjRabXREVFZGRVZGTlFlR0Z5V2xoMlRuSnJlRlV6Vkd0VlRVa3pNM2w2ZGtaV1ZsSlVOSGQ0VjBwRE9UazBUM05rWTFvMEsxSkhUbk5aUkhsU05XZHRaSEl3YmtSSFp6MGlMQ0pOU1VsRFVYcERRMEZqYldkQmQwbENRV2RKU1V4aldEaHBUa3hHVXpWVmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhkYWVrVmlUVUpyUjBFeFZVVkJkM2RUVVZoQ2QySkhWV2RWYlRsMlpFTkNSRkZUUVhSSlJXTjZUVk5aZDBwQldVUldVVkZNUkVJeFFtTklRbk5hVTBKRVdsaEtNR0ZYV25CWk1rWXdZVmM1ZFVsRlJqRmtSMmgyWTIxc01HVlVSVlJOUWtWSFFURlZSVU5uZDB0UldFSjNZa2RWWjFOWE5XcE1ha1ZNVFVGclIwRXhWVVZDYUUxRFZsWk5kMGhvWTA1TlZGRjNUa1JOZDAxVVozaFBWRUV5VjJoalRrMTZhM2RPUkUxM1RWUm5lRTlVUVRKWGFrSnVUVkp6ZDBkUldVUldVVkZFUkVKS1FtTklRbk5hVTBKVFlqSTVNRWxGVGtKSlF6Qm5VbnBOZUVwcVFXdENaMDVXUWtGelRVaFZSbmRqUjNoc1NVVk9iR051VW5CYWJXeHFXVmhTY0dJeU5HZFJXRll3WVVjNWVXRllValZOVWsxM1JWRlpSRlpSVVV0RVFYQkNZMGhDYzFwVFFrcGliVTExVFZGemQwTlJXVVJXVVZGSFJYZEtWbFY2UWpKTlFrRkhRbmx4UjFOTk5EbEJaMFZIUWxOMVFrSkJRV2xCTWtsQlFrcHFjRXg2TVVGamNWUjBhM2xLZVdkU1RXTXpVa05XT0dOWGFsUnVTR05HUW1KYVJIVlhiVUpUY0ROYVNIUm1WR3BxVkhWNGVFVjBXQzh4U0RkWmVWbHNNMG8yV1ZKaVZIcENVRVZXYjBFdlZtaFpSRXRZTVVSNWVFNUNNR05VWkdSeFdHdzFaSFpOVm5wMFN6VXhOMGxFZGxsMVZsUmFXSEJ0YTA5c1JVdE5ZVTVEVFVWQmQwaFJXVVJXVWpCUFFrSlpSVVpNZFhjemNVWlpUVFJwWVhCSmNWb3pjalk1TmpZdllYbDVVM0pOUVRoSFFURlZaRVYzUlVJdmQxRkdUVUZOUWtGbU9IZEVaMWxFVmxJd1VFRlJTQzlDUVZGRVFXZEZSMDFCYjBkRFEzRkhVMDAwT1VKQlRVUkJNbWRCVFVkVlEwMVJRMFEyWTBoRlJtdzBZVmhVVVZreVpUTjJPVWQzVDBGRldreDFUaXQ1VW1oSVJrUXZNMjFsYjNsb2NHMTJUM2RuVUZWdVVGZFVlRzVUTkdGMEszRkplRlZEVFVjeGJXbG9SRXN4UVROVlZEZ3lUbEY2TmpCcGJVOXNUVEkzYW1Ka2IxaDBNbEZtZVVaTmJTdFphR2xrUkd0TVJqRjJURlZoWjAwMlFtZEVOVFpMZVV0QlBUMGlYWDAuZXlKMGNtRnVjMkZqZEdsdmJrbGtJam9pTWpBd01EQXdNRFkyTXpNMU5ESXlPQ0lzSW05eWFXZHBibUZzVkhKaGJuTmhZM1JwYjI1SlpDSTZJakl3TURBd01EQTJOak16TlRReU1qZ2lMQ0ppZFc1a2JHVkpaQ0k2SW1OdmJTNXphVzVoZEdFdVNrdEdhWFJ1WlhOeklpd2ljSEp2WkhWamRFbGtJam9pWTI5dExtcHJabWwwYm1WemN5NWhMbkJ5YVdObExqRWlMQ0p3ZFhKamFHRnpaVVJoZEdVaU9qRTNNakUyTkRVNE1qWXdNREFzSW05eWFXZHBibUZzVUhWeVkyaGhjMlZFWVhSbElqb3hOekl4TmpRMU9ESTJNREF3TENKeGRXRnVkR2wwZVNJNk1Td2lkSGx3WlNJNklrTnZibk4xYldGaWJHVWlMQ0pwYmtGd2NFOTNibVZ5YzJocGNGUjVjR1VpT2lKUVZWSkRTRUZUUlVRaUxDSnphV2R1WldSRVlYUmxJam94TnpJeE5qUTFPRFF5TkRnNExDSmxiblpwY205dWJXVnVkQ0k2SWxOaGJtUmliM2dpTENKMGNtRnVjMkZqZEdsdmJsSmxZWE52YmlJNklsQlZVa05JUVZORklpd2ljM1J2Y21WbWNtOXVkQ0k2SWtOSVRpSXNJbk4wYjNKbFpuSnZiblJKWkNJNklqRTBNelEyTlNJc0luQnlhV05sSWpvNU9EQXdNQ3dpWTNWeWNtVnVZM2tpT2lKRFRsa2lmUS5nTC1UVThvRV9NY2Q5TGpQb2g0LWxuT3JZek04N1FOY1RxYXFqZ05KT3VSWHMxZGpKQ1VnSVR0Vmd5cWdvMXozVGpGc3BYd1RpYklQeVN1NFg3QUd5dyJ9LCJ2ZXJzaW9uIjoiMi4wIiwic2lnbmVkRGF0ZSI6MTcyMTY0NTg0MjUwNn0.bQeSZOF1IDCD--iN3i711ADUVwhrIoqCLklkBUHsebpFPgTH5TtAJjaeSFkmrqCXzZYLb_m-5acirt5xnWMubQ"); // String notificationType = payload.get("notificationType").toString(); // JSONObject data = payload.getJSONObject("data"); // String signedTransactionInfo = data.get("signedTransactionInfo").toString(); // String environment = data.get("environment").toString(); // JSONObject transactionInfo = verifyAndGet(signedTransactionInfo); // String transactionId = transactionInfo.get("transactionId").toString(); // String originalTransactionId = transactionInfo.get("originalTransactionId").toString(); // String productId = transactionInfo.get("productId").toString(); // System.err.println("json串"+transactionInfo); // System.err.println("data"+data); // if ("DID_RENEW".equals(notificationType)) { // // todo 处理订阅续期业务逻辑 // // } else if ("REFUND".equals(notificationType)) { // // todo 处理退款业务逻辑 // // } else { // } // // } catch (CertificateException e) { // } // // // } public static JSONObject verifyAndGet(String jws) throws CertificateException { DecodedJWT decodedJWT = JWT.decode(jws); // 拿到 header 中 x5c 数组中第一个 String header = new String(java.util.Base64.getDecoder().decode(decodedJWT.getHeader())); String x5c = JSONObject.parseObject(header).getJSONArray("x5c").getString(0); // 获取公钥 PublicKey publicKey = getPublicKeyByX5c(x5c); // 验证 token Algorithm algorithm = Algorithm.ECDSA256((ECPublicKey) publicKey, null); try { algorithm.verify(decodedJWT); } catch (SignatureVerificationException e) { throw new RuntimeException("签名验证失败"); } // 解析数据 return JSONObject.parseObject(new String(java.util.Base64.getDecoder().decode(decodedJWT.getPayload()))); } /** * 获取公钥 * @param x5c * @return * @throws */ private static PublicKey getPublicKeyByX5c(String x5c) throws CertificateException { byte[] x5c0Bytes = java.util.Base64.getDecoder().decode(x5c); CertificateFactory fact = CertificateFactory.getInstance("X.509"); X509Certificate cer = (X509Certificate) fact.generateCertificate(new ByteArrayInputStream(x5c0Bytes)); return cer.getPublicKey(); } } guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserController.java
@@ -5,6 +5,7 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.stylefeng.guns.modular.system.dao.UserBlackMapper; import com.stylefeng.guns.modular.system.dto.*; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; @@ -20,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import springfox.documentation.spring.web.paths.AbstractPathProvider; import java.math.BigDecimal; import java.math.RoundingMode; @@ -86,9 +88,12 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), }) public ResultUtil<PeopleListVO> peopleList() { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } PeopleListVO peopleListVO = new PeopleListVO(); peopleListVO.setUserName(appUserService.getAppUser().getName()); AppUser appUser = appUserService.getAppUser(); Integer inviteUserId = appUser.getInviteUserId(); if (inviteUserId!=null){ AppUser appUser1 = appUser.selectById(inviteUserId); @@ -127,14 +132,22 @@ }) public ResultUtil getBindingUserName(String code) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } if (code.equals(appUser.getCode())){ return ResultUtil.errorInvite("不能绑定自己",null); return ResultUtil.errorInvite("不能绑定自己",""); } AppUser code1 = appUserService.selectOne(new EntityWrapper<AppUser>() .eq("code", code)); if (code1 == null){ return ResultUtil.errorInvite("邀请码无效",null); return ResultUtil.errorInvite("邀请码无效",""); } // else{ // if (code1.getInviteUserId().equals(appUser.getId())){ // return ResultUtil.error("邀请失败,当前邀请用户为您的邀请人", null); // } // } return ResultUtil.success(code1.getName()); } @ResponseBody @@ -146,13 +159,21 @@ }) public ResultUtil updateBankCard(String code) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } AppUser code1 = appUserService.selectOne(new EntityWrapper<AppUser>() .eq("code", code)); if (code1 == null){ return ResultUtil.errorInvite("邀请码无效",null); return ResultUtil.errorInvite("邀请码无效",""); } if (code.equals(appUser.getCode())){ return ResultUtil.error("不能绑定自己"); } if (code1.getInviteUserId()!=null){ if (code1.getInviteUserId().equals(appUser.getId())){ return ResultUtil.error("邀请失败,当前邀请用户为您的邀请人", null); } } appUser.setInviteUserId(code1.getId()); appUserService.updateById(appUser); @@ -169,6 +190,9 @@ }) public ResultUtil Withdrawal(BigDecimal money) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } if (!StringUtils.hasLength(appUser.getBankCard())){ return ResultUtil.error("提现失败 请先绑定银行卡"); } @@ -203,6 +227,9 @@ public ResultUtil updateBankCard(String accountName, String bankCard,String bankName,String bankPhone,String bankCardImg) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } appUser.setBankCard(bankCard); appUser.setAccountName(accountName); appUser.setBankName(bankName); @@ -212,6 +239,71 @@ return ResultUtil.success(appUser); } appUserService.updateById(appUser); return ResultUtil.success(); } @Autowired private UserBlackMapper userBlackMapper; @ResponseBody @PostMapping("/base/appUser/blackList") @ApiOperation(value = "拉黑列表", tags = {"2.0新增"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), @ApiImplicitParam(value = "页码,首页1", name = "pageNum", dataType = "int"), @ApiImplicitParam(value = "页条数", name = "pageSize", dataType = "int"), }) public ResultUtil<List<BlackListVO>> blackList(Integer pageNum,Integer pageSize) { List<BlackListVO> res = new ArrayList<>(); AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } List<UserBlack> userId = userBlackService.selectList(new EntityWrapper<UserBlack>() .eq("userId", appUser.getId())); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); for (UserBlack userBlack : userId) { AppUser appUser1 = appUserService.selectById(userBlack.getBlackUserId()); if (appUser1 != null){ BlackListVO blackListVO = new BlackListVO(); blackListVO.setId(appUser1.getId()); blackListVO.setHeadImg(appUser1.getHeadImg()); blackListVO.setName(appUser1.getName()); String format = simpleDateFormat.format(userBlack.getInsertTime()); res.add(blackListVO); } } List<BlackListVO> findVOS = testing4(res.size(), pageNum, pageSize, res); return ResultUtil.success(findVOS); } @Autowired private IUserBlackService userBlackService; @ResponseBody @PostMapping("/base/appUser/black") @ApiOperation(value = "拉黑/取消拉黑操作", tags = {"2.0新增"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), @ApiImplicitParam(value = "被拉黑用户id", name = "id", dataType = "string" ), }) public ResultUtil black(Integer id) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } UserBlack userBlack = userBlackService.selectOne(new EntityWrapper<UserBlack>() .eq("userId", appUser.getId()) .eq("blackUserId", id)); // 执行取消拉黑操作 if (userBlack!=null){ userBlackService.deleteById(userBlack.getId()); }else{ // 执行新增拉黑操作 userBlack = new UserBlack(); userBlack.setInsertTime(new Date()); userBlack.setUserId(appUser.getId()); userBlack.setBlackUserId(id); userBlackService.insert(userBlack); } return ResultUtil.success(); } @@ -241,6 +333,10 @@ }) public ResultUtil<AppUser> updateBankCard() { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } return ResultUtil.success(appUserService.getAppUser()); } @@ -254,6 +350,9 @@ List<CouponVO> res = new ArrayList<>(); req.setPageNum((req.getPageNum() - 1) * req.getPageSize()); AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } req.setUserId(appUser.getId()); List<CouponReceive> couponReceives = couponReceiveService.getList(req); for (CouponReceive couponReceive : couponReceives) { @@ -286,6 +385,9 @@ }) public ResultUtil<List<WithdtawalVO>> withdrawal(Integer year,Integer month,Integer pageNum,Integer pageSize) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } List<WithdtawalVO> withdtawalVOS = new ArrayList<>(); Wrapper<Withdrawal> eq1 = new EntityWrapper<Withdrawal>() .eq("userId", appUser.getId()); @@ -357,6 +459,10 @@ public ResultUtil<WalletVO> wallet(Integer year,Integer month,Integer pageNum,Integer pageSize) { WalletVO walletVO = new WalletVO(); List<UserDetailVO> detail = new ArrayList<>(); AppUser appUser3 = appUserService.getAppUser(); if (appUser3 == null){ return ResultUtil.tokenErr("登录失效"); } Integer id = appUserService.getAppUser().getId(); BigDecimal balance = appUserService.getAppUser().getBalance(); walletVO.setBalance(balance); @@ -509,6 +615,484 @@ walletVO.setDetails(testing); return ResultUtil.success(walletVO); } @ResponseBody @PostMapping("/base/appUser/appleWallet") @ApiOperation(value = "苹果佣金列表(提现 好友消费 佣金 充值 平台红包)", tags = {"我的"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), @ApiImplicitParam(value = "年", name = "year", dataType = "int"), @ApiImplicitParam(value = "月", name = "month", dataType = "int"), @ApiImplicitParam(value = "页码,首页1", name = "pageNum", dataType = "int"), @ApiImplicitParam(value = "页条数", name = "pageSize", dataType = "int"), @ApiImplicitParam(value = "类型 1=提现 2=好友消费 3=佣金 4=充值 5=平台红包", name = "type"), }) public ResultUtil<WalletVO> appleWallet(Integer year,Integer month,Integer pageNum,Integer pageSize,String type) { WalletVO walletVO = new WalletVO(); List<UserDetailVO> detail = new ArrayList<>(); AppUser appUser3 = appUserService.getAppUser(); if (appUser3 == null){ return ResultUtil.tokenErr("登录失效"); } Integer id = appUserService.getAppUser().getId(); BigDecimal balance = appUserService.getAppUser().getBalance(); walletVO.setBalance(balance); if (!StringUtils.hasLength(type)){ // 查询全部 Wrapper<Recharge> eq1 = new EntityWrapper<Recharge>() .eq("userId", id) .eq("state", 2); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq1.ge("insertTime", startDate).le("insertTime", endDate); } // 查询充值记录 List<Recharge> recharges = rechargeService.selectList(eq1); for (Recharge recharge : recharges) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("+"+recharge.getAmount().toString()); userDetailVO.setType("充值"); userDetailVO.setInsertTime1(recharge.getInsertTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String format1 = format.format(recharge.getInsertTime()); userDetailVO.setInsertTime(format1); detail.add(userDetailVO); } // 查询购课记录 只查询钱包支付的 Wrapper<OrderCourse> eq2 = new EntityWrapper<OrderCourse>() .eq("userId", id) // .eq("payType", 3) .eq("state", 2); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq2.ge("insertTime", startDate).le("insertTime", endDate); } // List<OrderCourse> orderCourses = orderCourseService.selectList(eq2); // for (OrderCourse orderCours : orderCourses) { // UserDetailVO userDetailVO = new UserDetailVO(); // userDetailVO.setAmount("-"+orderCours.getRealMoney()); // userDetailVO.setType("购买课程"); // userDetailVO.setInsertTime1(orderCours.getInsertTime()); // SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); // String format1 = format.format(orderCours.getInsertTime()); // userDetailVO.setInsertTime(format1); // detail.add(userDetailVO); // } Wrapper<Order> eq = new EntityWrapper<Order>() .eq("userId", id) // .eq("payType", 3) .eq("state", 2); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq.ge("insertTime", startDate).le("insertTime", endDate); } // List<Order> orders = orderService.selectList(eq); // 查询购买套餐记录 只查询钱包支付的 // for (Order order : orders) { // UserDetailVO userDetailVO = new UserDetailVO(); // userDetailVO.setAmount("-"+order.getRealMoney()); // userDetailVO.setType("购买套餐"); // userDetailVO.setInsertTime1(order.getInsertTime()); // SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); // String format1 = format.format(order.getInsertTime()); // userDetailVO.setInsertTime(format1); // detail.add(userDetailVO); // } // 查询提现记录 Wrapper<Withdrawal> eq3 = new EntityWrapper<Withdrawal>() .eq("userId", id); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq3.ge("insertTime", startDate).le("insertTime", endDate); } List<Withdrawal> withdrawals = withdrawalService.selectList(eq3); for (Withdrawal withdrawal : withdrawals) { UserDetailVO userDetailVO = new UserDetailVO(); switch (withdrawal.getState()){ case 1: userDetailVO.setAmount("-"+withdrawal.getAmount()); userDetailVO.setType("提现"); break; case 2: userDetailVO.setAmount("-"+withdrawal.getAmount()); userDetailVO.setType("提现"); break; case 3: userDetailVO.setAmount("+"+withdrawal.getAmount()); userDetailVO.setType("提现失败"); break; } userDetailVO.setInsertTime1(withdrawal.getInsertTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String format1 = format.format(withdrawal.getInsertTime()); userDetailVO.setInsertTime(format1); detail.add(userDetailVO); } // 查询是否有邀请过用户 获得消费奖励 Wrapper<Invite> eq4 = new EntityWrapper<Invite>() .eq("giftUserId", id); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq4.ge("insertTime", startDate).le("insertTime", endDate); } eq4.eq("type",1); List<Invite> giftUserId = inviteService.selectList(eq4); for (Invite invite : giftUserId) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("+"+invite.getAmount()); AppUser appUser = appUserService.selectById(invite.getUserId()); userDetailVO.setType("好友消费:("+appUser.getName()+"消费了"+invite.getConsume()+"元)"); userDetailVO.setInsertTime1(invite.getInsertTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String format1 = format.format(invite.getInsertTime()); userDetailVO.setInsertTime(format1); detail.add(userDetailVO); } // 查询红包发放记录 Wrapper<RedPackage> eq5 = new EntityWrapper<RedPackage>(); if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq5.ge("insertTime", startDate).le("insertTime", endDate); } List<RedPackage> redPackages = redPackageService.selectList(eq5); for (RedPackage redPackage : redPackages) { if (appUserService.getAppUser().getInsertTime().compareTo(redPackage.getInsertTime())>0){ continue; } UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("+"+redPackage.getAmount()); userDetailVO.setType("平台红包"); userDetailVO.setInsertTime1(redPackage.getInsertTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String format1 = format.format(redPackage.getInsertTime()); userDetailVO.setInsertTime(format1); detail.add(userDetailVO); } List<UserDetailVO> sortedList = detail.stream() .sorted(Comparator.comparing(UserDetailVO::getInsertTime1).reversed()) .collect(Collectors.toList()); List<UserDetailVO> testing = testing(sortedList.size(), pageNum, pageSize, sortedList); walletVO.setDetails(testing); return ResultUtil.success(walletVO); }else{ String[] split = type.split(","); List<String> collect = Arrays.stream(split).collect(Collectors.toList()); if (collect.contains("1")){ // 查询提现记录 Wrapper<Withdrawal> eq3 = new EntityWrapper<Withdrawal>() .eq("userId", id); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq3.ge("insertTime", startDate).le("insertTime", endDate); } List<Withdrawal> withdrawals = withdrawalService.selectList(eq3); for (Withdrawal withdrawal : withdrawals) { UserDetailVO userDetailVO = new UserDetailVO(); switch (withdrawal.getState()){ case 1: userDetailVO.setAmount("-"+withdrawal.getAmount()); userDetailVO.setType("提现"); break; case 2: userDetailVO.setAmount("-"+withdrawal.getAmount()); userDetailVO.setType("提现"); break; case 3: userDetailVO.setAmount("+"+withdrawal.getAmount()); userDetailVO.setType("提现失败"); break; } userDetailVO.setInsertTime1(withdrawal.getInsertTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String format1 = format.format(withdrawal.getInsertTime()); userDetailVO.setInsertTime(format1); detail.add(userDetailVO); } } if (collect.contains("2")){ // 查询是否有邀请过用户 获得消费奖励 Wrapper<Invite> eq4 = new EntityWrapper<Invite>() .eq("giftUserId", id); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq4.ge("insertTime", startDate).le("insertTime", endDate); } eq4.eq("type",1); List<Invite> giftUserId = inviteService.selectList(eq4); for (Invite invite : giftUserId) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("+"+invite.getAmount()); AppUser appUser = appUserService.selectById(invite.getUserId()); userDetailVO.setType("好友消费:("+appUser.getName()+"消费了"+invite.getConsume()+"元)"); userDetailVO.setInsertTime1(invite.getInsertTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String format1 = format.format(invite.getInsertTime()); userDetailVO.setInsertTime(format1); detail.add(userDetailVO); } } if (collect.contains("3")){ // 查询是否有邀请过用户 获得消费奖励 Wrapper<Invite> eq4 = new EntityWrapper<Invite>() .eq("giftUserId", id); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq4.ge("insertTime", startDate).le("insertTime", endDate); } eq4.eq("type",1); List<Invite> giftUserId = inviteService.selectList(eq4); for (Invite invite : giftUserId) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("+"+invite.getAmount()); AppUser appUser = appUserService.selectById(invite.getUserId()); userDetailVO.setType("好友消费:("+appUser.getName()+"消费了"+invite.getConsume()+"元)"); userDetailVO.setInsertTime1(invite.getInsertTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String format1 = format.format(invite.getInsertTime()); userDetailVO.setInsertTime(format1); detail.add(userDetailVO); } } if (collect.contains("4")){ Wrapper<Recharge> eq1 = new EntityWrapper<Recharge>() .eq("userId", id) .eq("state", 2); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq1.ge("insertTime", startDate).le("insertTime", endDate); } // 查询充值记录 List<Recharge> recharges = rechargeService.selectList(eq1); for (Recharge recharge : recharges) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("+"+recharge.getAmount().toString()); userDetailVO.setType("充值"); userDetailVO.setInsertTime1(recharge.getInsertTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String format1 = format.format(recharge.getInsertTime()); userDetailVO.setInsertTime(format1); detail.add(userDetailVO); } } if (collect.contains("5")){ // 查询红包发放记录 Wrapper<RedPackage> eq5 = new EntityWrapper<RedPackage>(); if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq5.ge("insertTime", startDate).le("insertTime", endDate); } List<RedPackage> redPackages = redPackageService.selectList(eq5); for (RedPackage redPackage : redPackages) { if (appUserService.getAppUser().getInsertTime().compareTo(redPackage.getInsertTime())>0){ continue; } UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("+"+redPackage.getAmount()); userDetailVO.setType("平台红包"); userDetailVO.setInsertTime1(redPackage.getInsertTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String format1 = format.format(redPackage.getInsertTime()); userDetailVO.setInsertTime(format1); detail.add(userDetailVO); } } List<UserDetailVO> sortedList = detail.stream() .sorted(Comparator.comparing(UserDetailVO::getInsertTime1).reversed()) .collect(Collectors.toList()); List<UserDetailVO> testing = testing(sortedList.size(), pageNum, pageSize, sortedList); walletVO.setDetails(testing); return ResultUtil.success(walletVO); } } @ResponseBody @PostMapping("/base/appUser/appleWalletCourse") @ApiOperation(value = "苹果购课、购买套餐列表", tags = {"我的"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), @ApiImplicitParam(value = "年", name = "year", dataType = "int"), @ApiImplicitParam(value = "月", name = "month", dataType = "int"), @ApiImplicitParam(value = "页码,首页1", name = "pageNum", dataType = "int"), @ApiImplicitParam(value = "页条数", name = "pageSize", dataType = "int"), }) public ResultUtil<WalletVO> appleWalletCourse(Integer year,Integer month,Integer pageNum,Integer pageSize) { WalletVO walletVO = new WalletVO(); List<UserDetailVO> detail = new ArrayList<>(); AppUser appUser3 = appUserService.getAppUser(); if (appUser3 == null){ return ResultUtil.tokenErr("登录失效"); } Integer id = appUserService.getAppUser().getId(); BigDecimal balance = appUserService.getAppUser().getBalance(); walletVO.setBalance(balance); Wrapper<Recharge> eq1 = new EntityWrapper<Recharge>() .eq("userId", id) .eq("state", 2); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq1.ge("insertTime", startDate).le("insertTime", endDate); } // 查询充值记录 // List<Recharge> recharges = rechargeService.selectList(eq1); // for (Recharge recharge : recharges) { // UserDetailVO userDetailVO = new UserDetailVO(); // userDetailVO.setAmount("+"+recharge.getAmount().toString()); // userDetailVO.setType("充值"); // userDetailVO.setInsertTime1(recharge.getInsertTime()); // SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); // String format1 = format.format(recharge.getInsertTime()); // userDetailVO.setInsertTime(format1); // detail.add(userDetailVO); // } // 查询购课记录 只查询钱包支付的 Wrapper<OrderCourse> eq2 = new EntityWrapper<OrderCourse>() .eq("userId", id) // .eq("payType", 3) .eq("state", 2); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq2.ge("insertTime", startDate).le("insertTime", endDate); } List<OrderCourse> orderCourses = orderCourseService.selectList(eq2); for (OrderCourse orderCours : orderCourses) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("-"+orderCours.getRealMoney()); userDetailVO.setType("购买课程"); userDetailVO.setInsertTime1(orderCours.getInsertTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String format1 = format.format(orderCours.getInsertTime()); userDetailVO.setInsertTime(format1); detail.add(userDetailVO); } Wrapper<Order> eq = new EntityWrapper<Order>() .eq("userId", id) // .eq("payType", 3) .eq("state", 2); // 如果传递了年份和月份,则添加时间条件 if (year != null && month != null) { LocalDate startDate = LocalDate.of(year, month, 1); LocalDate endDate = startDate.plusMonths(1).minusDays(1); eq.ge("insertTime", startDate).le("insertTime", endDate); } List<Order> orders = orderService.selectList(eq); // 查询购买套餐记录 只查询钱包支付的 for (Order order : orders) { UserDetailVO userDetailVO = new UserDetailVO(); userDetailVO.setAmount("-"+order.getRealMoney()); userDetailVO.setType("购买套餐"); userDetailVO.setInsertTime1(order.getInsertTime()); SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String format1 = format.format(order.getInsertTime()); userDetailVO.setInsertTime(format1); detail.add(userDetailVO); } // 查询提现记录 // Wrapper<Withdrawal> eq3 = new EntityWrapper<Withdrawal>() // .eq("userId", id); // // 如果传递了年份和月份,则添加时间条件 // if (year != null && month != null) { // LocalDate startDate = LocalDate.of(year, month, 1); // LocalDate endDate = startDate.plusMonths(1).minusDays(1); // eq3.ge("insertTime", startDate).le("insertTime", endDate); // } // List<Withdrawal> withdrawals = withdrawalService.selectList(eq3); // for (Withdrawal withdrawal : withdrawals) { // UserDetailVO userDetailVO = new UserDetailVO(); // switch (withdrawal.getState()){ // case 1: // userDetailVO.setAmount("-"+withdrawal.getAmount()); // userDetailVO.setType("提现"); // break; // case 2: // userDetailVO.setAmount("-"+withdrawal.getAmount()); // userDetailVO.setType("提现"); // break; // case 3: // userDetailVO.setAmount("+"+withdrawal.getAmount()); // userDetailVO.setType("提现失败"); // break; // } // userDetailVO.setInsertTime1(withdrawal.getInsertTime()); // SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); // String format1 = format.format(withdrawal.getInsertTime()); // userDetailVO.setInsertTime(format1); // detail.add(userDetailVO); // } // 查询是否有邀请过用户 获得消费奖励 // Wrapper<Invite> eq4 = new EntityWrapper<Invite>() // .eq("giftUserId", id); // // 如果传递了年份和月份,则添加时间条件 // if (year != null && month != null) { // LocalDate startDate = LocalDate.of(year, month, 1); // LocalDate endDate = startDate.plusMonths(1).minusDays(1); // eq4.ge("insertTime", startDate).le("insertTime", endDate); // } // eq4.eq("type",1); // List<Invite> giftUserId = inviteService.selectList(eq4); // for (Invite invite : giftUserId) { // UserDetailVO userDetailVO = new UserDetailVO(); // userDetailVO.setAmount("+"+invite.getAmount()); // AppUser appUser = appUserService.selectById(invite.getUserId()); // userDetailVO.setType("好友消费:("+appUser.getName()+"消费了"+invite.getConsume()+"元)"); // userDetailVO.setInsertTime1(invite.getInsertTime()); // SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); // String format1 = format.format(invite.getInsertTime()); // userDetailVO.setInsertTime(format1); // detail.add(userDetailVO); // } // 查询红包发放记录 // Wrapper<RedPackage> eq5 = new EntityWrapper<RedPackage>(); // if (year != null && month != null) { // LocalDate startDate = LocalDate.of(year, month, 1); // LocalDate endDate = startDate.plusMonths(1).minusDays(1); // eq5.ge("insertTime", startDate).le("insertTime", endDate); // } // List<RedPackage> redPackages = redPackageService.selectList(eq5); // for (RedPackage redPackage : redPackages) { // if (appUserService.getAppUser().getInsertTime().compareTo(redPackage.getInsertTime())>0){ // continue; // } // UserDetailVO userDetailVO = new UserDetailVO(); // userDetailVO.setAmount("+"+redPackage.getAmount()); // userDetailVO.setType("平台红包"); // userDetailVO.setInsertTime1(redPackage.getInsertTime()); // SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); // String format1 = format.format(redPackage.getInsertTime()); // userDetailVO.setInsertTime(format1); // detail.add(userDetailVO); // } List<UserDetailVO> sortedList = detail.stream() .sorted(Comparator.comparing(UserDetailVO::getInsertTime1).reversed()) .collect(Collectors.toList()); List<UserDetailVO> testing = testing(sortedList.size(), pageNum, pageSize, sortedList); walletVO.setDetails(testing); return ResultUtil.success(walletVO); } public static List<UserDetailVO> testing(long total, long current, long size, List<UserDetailVO> str){ List<UserDetailVO> result = new ArrayList<>(); //获取初始化分页结构 @@ -540,6 +1124,9 @@ }) public ResultUtil changeConstellation(String consName ) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } appUser.setConstellation(consName); appUserService.updateById(appUser); return ResultUtil.success(); @@ -585,6 +1172,9 @@ int month = currentDate.getMonthValue(); int day = currentDate.getDayOfMonth(); AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } if (!StringUtils.hasLength(appUser.getConstellation())){ // 根据月份和日期确定星座 consName = getZodiacSign(month, day); @@ -609,6 +1199,10 @@ @ApiImplicitParam(value = "动态id", name = "findId", dataType = "int"), }) public ResultUtil feedBack(Integer findId) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Find find = findService.selectById(findId); find.setIsDelete(1); findService.updateById(find); @@ -624,8 +1218,12 @@ @ApiImplicitParam(value = "页条数", name = "pageSize", dataType = "int") }) public ResultUtil<List<FindVO>> myFind(Integer pageNum,Integer pageSize) { Integer id = appUserService.getAppUser().getId(); AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Integer id = appUserService.getAppUser().getId(); List<String> strings = new ArrayList<>(); strings.add("insertTime"); List<Find> finds = findService.selectList(new EntityWrapper<Find>() @@ -649,6 +1247,27 @@ } List<FindVO> findVOS = testing3(res.size(), pageNum, pageSize, res); return ResultUtil.success(findVOS); } public static List<BlackListVO> testing4(long total, long current, long size, List<BlackListVO> str){ List<BlackListVO> result = new ArrayList<>(); //获取初始化分页结构 com.stylefeng.guns.modular.system.util.Page<BlackListVO> page = new Page().getPage(total, size, current - 1); //获取集合下标初始值 long startIndex = page.getStartIndex(); //获取集合下标结束值 long endInddex = 0; if(startIndex + page.getCurrent() >= total || size > total){ endInddex = total; }else { endInddex = Math.min(startIndex + page.getSize(), total); } //如果输入的开始查询下标大于集合大小,则查询为空值 if(startIndex > total){ result = Collections.emptyList(); }else{ result = str.subList((int)startIndex,(int)endInddex); } return result; } public static List<FindVO> testing3(long total, long current, long size, List<FindVO> str){ List<FindVO> result = new ArrayList<>(); @@ -679,6 +1298,10 @@ @ApiImplicitParam(name = "title", value = "标题"), }) public ResultUtil<List<UseGuide>> useGuide(String title) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } EntityWrapper<UseGuide> wrapper = new EntityWrapper<>(); List<String> strings = new ArrayList<>(); strings.add("sort"); @@ -699,6 +1322,9 @@ }) public ResultUtil setUnit(Integer type) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } appUser.setUnit(type); appUserService.updateById(appUser); return ResultUtil.success("设置成功"); @@ -714,6 +1340,9 @@ public ResultUtil setWeight(Integer type ,Double weight) { Double temp = 0.0; AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } switch (appUser.getUnit()){ case 1: temp = weight; @@ -771,6 +1400,10 @@ @ApiImplicitParam(name = "img", value = "图片地址,多张逗号隔开") }) public ResultUtil feedBack(String content,String img) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } AuditVO content1 = auditUtil.content(content); switch (content1.getType()){ case "terrorism": @@ -805,6 +1438,9 @@ public ResultUtil<UserInfoVO> userInfo() { UserInfoVO userInfoVO = new UserInfoVO(); AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } userInfoVO.setConstellation(appUser.getConstellation()); BeanUtils.copyProperties(appUser,userInfoVO); if (appUser.getConstellation() == null){ @@ -1033,12 +1669,7 @@ return temp; } public static void main(String[] args) { UserInfoVO userInfoVO = new UserInfoVO(); BMIVO bmi = getBMI(userInfoVO, 160, 2, 58D); System.err.println(bmi); } private static BMIVO getBMI(UserInfoVO userInfoVO, Integer height,Integer gender, Double temp) { String url = "http://apis.juhe.cn/fapig/calculator/weight"; Map<String, String> params = new HashMap<String, String>(); @@ -1111,8 +1742,14 @@ } return null; } public static void main(String[] args) { UserInfoVO userInfoVO = new UserInfoVO(); String index = getIndex(80, 1, 3d, 3L); System.err.println(index); } // 获取健康指数 private String getIndex(Integer height,Integer gender, Double temp,Long age) { private static String getIndex(Integer height,Integer gender, Double temp,Long age) { String url = "http://apis.juhe.cn/fapig/healthy/bmr"; Map<String, String> params = new HashMap<String, String>(); params.put("key", "c28bcb61589b8943ea35887e4fd35afe"); // 在个人中心->我的数据,接口名称上方查看 @@ -1388,6 +2025,10 @@ }) public ResultUtil<List<CourseList>> collectCourse(CourseQuery req) { req.setPageNum((req.getPageNum() - 1) * req.getPageSize()); AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Integer id = appUserService.getAppUser().getId(); // 查询用户已收藏的课程ids List<Integer> courseIds = collectService.selectList(new EntityWrapper<UserCollect>() @@ -1397,6 +2038,17 @@ courseIds.add(-1); } req.setCourseIds(courseIds); List<String> strings = new ArrayList<>(); if (req.getPositionName1()!=null){ String positionName1 = req.getPositionName1(); if (!positionName1.equals("全部")){ strings.add(req.getPositionName1()); req.setPositionName(strings); }else{ req.setPositionName(new ArrayList<String>()); } } // 查询出收藏的课程 并且将免费的展示在最前面 List<CourseList> res = courseService.courseSearch(req); for (CourseList re : res) { @@ -1433,6 +2085,10 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header") }) public ResultUtil updateUserInfo(UpdateAppUserDTO dto) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } if(StringUtils.hasLength(dto.getHeadImg())){ AuditVO image = auditUtil.image(dto.getHeadImg()); switch (image.getType()){ @@ -1475,7 +2131,7 @@ } } AppUser appUser = appUserService.getAppUser(); // 根据当前用户所选择的单位 将weight置换成公斤存储 if (dto.getWeight()!=null){ // 本次体重 @@ -1532,6 +2188,9 @@ public ResultUtil<UserInfoVO> getUserInfo() { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } UserInfoVO userInfoVO = new UserInfoVO(); BeanUtils.copyProperties(appUser,userInfoVO); if (appUser.getHeight()!=null && appUser.getGender()!=null &&appUser.getWeight()!=null ){ @@ -1541,6 +2200,7 @@ System.err.println(appUser.getWeight()); BMIVO bmi = getBMI(userInfoVO,appUser.getHeight(),appUser.getGender(),appUser.getWeight()); userInfoVO.setBMI(bmi.getBmi()); userInfoVO.setBMIInfo(bmi.getMsg()); }else{ userInfoVO.setBMI("0"); } @@ -1602,6 +2262,10 @@ @ApiImplicitParam(name = "code", value = "邀请码"), }) public ResultUtil updatePhone(String phone, String code) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } // 原手机号码 String phone1 = appUserService.getAppUser().getPhone(); // 判断手机验证码是否匹配 @@ -1631,7 +2295,7 @@ if (appUsers.size()>0){ return ResultUtil.error("该手机号已注册"); } AppUser appUser = appUserService.getAppUser(); appUser.setPhone(phone); appUser.setAccount(phone); appUserService.updateById(appUser); @@ -1647,6 +2311,9 @@ }) public ResultUtil deleteAppUser( ) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } appUser.setState(3); appUserService.updateById(appUser); // 清除token @@ -1662,6 +2329,10 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header") }) public ResultUtil setAddress(Recipient dto) { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Integer id = appUserService.getAppUser().getId(); Recipient userId = recipientService.selectOne(new EntityWrapper<Recipient>() .eq("userId", id)); @@ -1684,6 +2355,10 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header") }) public ResultUtil<Recipient> getAddress() { AppUser appUser = appUserService.getAppUser(); if (appUser == null){ return ResultUtil.tokenErr("登录失效"); } Integer id = appUserService.getAppUser().getId(); Recipient userId = recipientService.selectOne(new EntityWrapper<Recipient>() .eq("userId", id)); guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserBlackMapper.java
New file @@ -0,0 +1,17 @@ package com.stylefeng.guns.modular.system.dao; import com.baomidou.mybatisplus.mapper.BaseMapper; import com.stylefeng.guns.modular.system.model.AppUser; import com.stylefeng.guns.modular.system.model.UserBlack; /** * <p> * 用户表 Mapper 接口 * </p> * * @author 无关风月 * @since 2024-02-06 */ public interface UserBlackMapper extends BaseMapper<UserBlack> { } guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/BlackUserMapper.xml
New file @@ -0,0 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.stylefeng.guns.modular.system.dao.UserBlackMapper"> </mapper> guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/CourseMapper.xml
@@ -20,9 +20,10 @@ <sql id="Base_Column_List"> id, courseName, coverImg, introduce, type, difficulty, time, isFree, sort, state </sql> <select id="courseSearch" resultType="com.stylefeng.guns.modular.system.vo.CourseList"> select t1.id,t1.courseName,t1.allTime as `time`,t1.isFree,t1.difficulty,t1.coverImg, CONCAT(t3.name,'|',t2.name) as typeName CONCAT(t3.name,'|',t2.name) as typeName,t2.appleAmount from t_course t1 left join t_fitness_position t2 on t1.positionId = t2.id left join t_fitness_type t3 on t2.typeId = t3.id @@ -30,8 +31,11 @@ <if test="null != req.courseName and '' != req.courseName"> and t1.courseName like CONCAT('%', #{req.courseName}, '%') </if> <if test="null != req.positionName1 and '' != req.positionName1"> and t2.name like CONCAT('%', #{req.positionName1}, '%') <if test="null != req.positionName and req.positionName.size()>0" > and t2.name in <foreach collection="req.positionName" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </if> <if test="null != req.time"> and (t1.time between #{req.startTime} and #{req.endTime} @@ -67,7 +71,7 @@ </select> <select id="courseSearch1" resultType="com.stylefeng.guns.modular.system.vo.CourseList"> select t1.id,t1.courseName,t1.allTime as `time`,t1.isFree,t1.difficulty,t1.coverImg,t1.introduce, t2.amount as price, t2.amount as price,t2.appleAmount, CONCAT(t3.name,'|',t2.name) as typeName from t_course t1 left join t_fitness_position t2 on t1.positionId = t2.id guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/FitnessPosition.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.activerecord.Model; import com.baomidou.mybatisplus.annotations.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -37,11 +38,43 @@ */ private Integer typeId; private Integer isDelete; private Integer isUse; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H1") private BigDecimal amount; private Integer isUse; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H2") private BigDecimal amount2; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H3") private BigDecimal amount3; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H4") private BigDecimal amount4; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H5") private BigDecimal amount5; @ApiModelProperty(value = "ios用 苹果价格H1") private BigDecimal appleAmount; @ApiModelProperty(value = "ios用 苹果价格H2") private BigDecimal appleAmount2; @ApiModelProperty(value = "ios用 苹果价格H3") private BigDecimal appleAmount3; @ApiModelProperty(value = "ios用 苹果价格H4") private BigDecimal appleAmount4; @ApiModelProperty(value = "ios用 苹果价格H5") private BigDecimal appleAmount5; public Integer getId() { guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Package.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.activerecord.Model; import com.baomidou.mybatisplus.annotations.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -38,10 +39,13 @@ * 原价 */ private BigDecimal amount; private BigDecimal appleAmount; /** * 优惠价 */ private BigDecimal price; @ApiModelProperty(value = "选择部位的难度 和部位ids一一对应") private String difficulty; public Integer getId() { guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/UserBlack.java
New file @@ -0,0 +1,42 @@ package com.stylefeng.guns.modular.system.model; import com.baomidou.mybatisplus.activerecord.Model; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.util.Date; /** * <p> * banner * </p> * * @author 无关风月 * @since 2024-02-06 */ @TableName("t_user_black") @Data public class UserBlack extends Model<UserBlack> { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty(value = "拉黑时间") private Date insertTime; @ApiModelProperty(value = "用户id") private Integer userId; @ApiModelProperty(value = "被拉黑用户id") private Integer blackUserId; @Override protected Serializable pkVal() { return null; } } guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserBlackService.java
New file @@ -0,0 +1,19 @@ package com.stylefeng.guns.modular.system.service; import com.baomidou.mybatisplus.service.IService; import com.stylefeng.guns.modular.system.model.AppUser; import com.stylefeng.guns.modular.system.model.UserBlack; /** * <p> * 用户表 服务类 * </p> * * @author 无关风月 * @since 2024-02-06 */ public interface IUserBlackService extends IService<UserBlack> { } guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserBlackServiceImpl.java
New file @@ -0,0 +1,30 @@ package com.stylefeng.guns.modular.system.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.system.dao.AppUserMapper; import com.stylefeng.guns.modular.system.dao.UserBlackMapper; import com.stylefeng.guns.modular.system.model.AppUser; import com.stylefeng.guns.modular.system.model.UserBlack; import com.stylefeng.guns.modular.system.service.IAppUserService; import com.stylefeng.guns.modular.system.service.IUserBlackService; import com.stylefeng.guns.modular.system.util.RedisUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; /** * <p> * 用户表 服务实现类 * </p> * * @author 无关风月 * @since 2024-02-06 */ @Service public class UserBlackServiceImpl extends ServiceImpl<UserBlackMapper, UserBlack> implements IUserBlackService { } guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpUtilIOS.java
New file @@ -0,0 +1,76 @@ package com.stylefeng.guns.modular.system.util; import net.sf.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; public class HttpUtilIOS { /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ public static synchronized String sendPosturl(String url, JSONObject param) { StringBuilder sb = new StringBuilder(); PrintWriter out = null; BufferedReader in = null; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; sb = new StringBuilder(); while ((line = in.readLine()) != null) { sb.append(line); } } catch (Exception e) { // System.out.println("发送 POST 请求出现异常!"+e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } System.out.print(sb.toString()); return sb.toString(); } } guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/IosPalUtils.java
New file @@ -0,0 +1,105 @@ package com.stylefeng.guns.modular.system.util; import net.sf.json.JSONObject; /** * 苹果支付 */ public class IosPalUtils { /*public static String buyAppVerify(String receipt, String environment) { String url = null; if(environment.equals("0")) { url = "https://buy.itunes.apple.com/verifyReceipt"; // 生产环境 } if (environment.equals("1")) { url = "https://sandbox.itunes.apple.com/verifyReceipt"; // 沙盒测试 } try { SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },new java.security.SecureRandom()); URL console = new URL(url); HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); conn.setSSLSocketFactory(sc.getSocketFactory()); conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-type", "application/json"); conn.setDoInput(true); conn.setDoOutput(true); BufferedOutputStream hurlBufOus = new BufferedOutputStream( conn.getOutputStream()); String newReceipt = receipt.replace(" ", "+"); String str = String.format("{\"receipt-data\":\"" + newReceipt + "\"}"); hurlBufOus.write(str.getBytes()); hurlBufOus.flush(); InputStream is = conn.getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader(is)); String line = null; StringBuffer sb = new StringBuffer(); while ((line = reader.readLine()) != null) { sb.append(line); } return sb.toString(); } catch (Exception ex) { ex.printStackTrace(); } return null; }*/ public static void main(String[] args) { Boolean success = isSuccess("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"); System.err.println(success); } /** * @param key 支付Id第三方返回的orderId */ public static Boolean isSuccess(String key) { try { System.out.println("!!!!!!!!!!!"+key+"!!!!!!!!!!!"); Boolean ok=false; if (key!=null) { key = key.replace(" ", "+"); System.out.println("!!!!!!!!!!!"+key+"!!!!!!!!!!!"); JSONObject data = JSONObject.fromObject("{\"receipt-data\":\"" + key + "\"}"); String score = HttpUtilIOS.sendPosturl("https://buy.itunes.apple.com/verifyReceipt", data); // 将String 转化为json JSONObject json = JSONObject.fromObject(score); System.out.print("!!!!!!!!!!!"+json+"!!!!!!!!!!!"); if (!json.getString("status").equals("0")) { JSONObject data1 = JSONObject.fromObject("{\"receipt-data\":\"" + key + "\"}"); String score1 = HttpUtilIOS.sendPosturl("https://sandbox.itunes.apple.com/verifyReceipt", data1); // 将String 转化为json JSONObject json1 = JSONObject.fromObject(score1); if (json1.getString("status").equals("0")) { String receipt = json1.getString("receipt"); JSONObject jsons = JSONObject.fromObject(receipt); String m3 = jsons.getString("in_app"); String m4 = m3.replace("[", ""); String m5 = m4.replace("]", ""); if(m5!=null){ ok=true; } } }else { if (json.getString("status").equals("0")) { String receipt = json.getString("receipt"); JSONObject jsons = JSONObject.fromObject(receipt); String m3 = jsons.getString("in_app"); String m4 = m3.replace("[", ""); String m5 = m4.replace("]", ""); if(m5!=null){ ok=true; } } } } return ok; } catch (Exception e) { e.printStackTrace(); } return null; } } guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/JwsUtil.java
New file @@ -0,0 +1,52 @@ package com.stylefeng.guns.modular.system.util; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jws; import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.io.ByteArrayInputStream; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.util.Base64; @Component public class JwsUtil { private Logger logger = LoggerFactory.getLogger(this.getClass()); public Jws<Claims> verifyJWT(String x5c, String jws){ try { X509Certificate cert = getCert(x5c); if (!cert.getSubjectDN().getName().contains("Apple Inc")){ logger.info("not apple cert . name = {}", cert.getIssuerX500Principal().getName()); return null; } return Jwts.parser().setSigningKey(cert.getPublicKey()).parseClaimsJws(jws); }catch (JwtException exc){ logger.info("jws verify failure.", exc); return null; } catch (Exception exc){ logger.info("jws verify error.", exc); return null; } } public static X509Certificate getCert(String x5c) throws CertificateException { String stripped = x5c.replaceAll("-----BEGIN (.*)-----", ""); stripped = stripped.replaceAll("-----END (.*)----", ""); stripped = stripped.replaceAll("\r\n", ""); stripped = stripped.replaceAll("\n", ""); stripped.trim(); byte[] keyBytes = Base64.getDecoder().decode(stripped); CertificateFactory fact = CertificateFactory.getInstance("X.509"); return (X509Certificate) fact.generateCertificate(new ByteArrayInputStream(keyBytes)); } public static void main(String[] args) { } } guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java
@@ -58,13 +58,13 @@ private String smid = "2088330203191220";//平台支付宝商户号... private String appid = "wx41d32f362ba0f911";//微信appid private String appid = "wxe376c3189895ec7e";//微信appid private String appSecret = "cf0ebf950f5926a69041a0e2bbe20f3e"; private String appSecret = "bd3ce1f17193b702ac13c9eeae2a2ca0"; private String mchId = "1501481761";//微信商户号 private String mchId = "1682142091";//微信商户号 private String key = "6f5e0c2dcabfa9c27b5da5836a362fef";//微信商户号 private String key = "dkebm3GJaryQYjdEiT6TSAa09p5CZJSw";//密钥 private String callbackPath = "https://jkcyl.cn/app";//支付回调网关地址 @@ -405,6 +405,7 @@ String result_code = map.get("result_code"); if ("SUCCESS".equals(result_code)) { Map<String, String> map1 = new HashedMap(); map1.put("nonce_str", map.get("nonce_str")); map1.put("out_trade_no", map.get("out_trade_no"));//存储的订单code map1.put("attach", map.get("attach"));//存储订单id guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/BlackListVO.java
New file @@ -0,0 +1,21 @@ package com.stylefeng.guns.modular.system.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.Date; import java.util.List; @Data @ApiModel(value = "拉黑列表返回VO") public class BlackListVO { @ApiModelProperty(value = "被拉黑用户id") private Integer id; @ApiModelProperty(value = "用户头像") private String headImg; @ApiModelProperty(value = "用户名称") private String name; } guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/BuyDetailVO.java
@@ -18,6 +18,8 @@ private String typeName; @ApiModelProperty(value = "支付价格") private BigDecimal amount; @ApiModelProperty(value = "苹果支付价格") private BigDecimal appleAmount; @ApiModelProperty(value = "包含课程数") private Integer count; @ApiModelProperty(value = "可选套餐列表") guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CourseDetailVO.java
@@ -34,6 +34,8 @@ private String introduce; @ApiModelProperty(value = "价格") private BigDecimal price; @ApiModelProperty(value = "苹果价格") private BigDecimal appleAmount; @ApiModelProperty(value = "课程视频") private List<CourseVideo> videos; @ApiModelProperty(value = "推荐课程") guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/CourseList.java
@@ -33,6 +33,8 @@ private String coverImg; @ApiModelProperty(value = "价格") private BigDecimal price; @ApiModelProperty(value = "苹果价格") private BigDecimal appleAmount; @ApiModelProperty(value = "页码,首页1", required = true) private Integer pageNum; @ApiModelProperty(value = "页条数", required = true) guns-admin/src/main/java/com/stylefeng/guns/modular/system/vo/PackageListVO.java
@@ -20,6 +20,8 @@ private BigDecimal amount; @ApiModelProperty(value = "套餐价格(和原价相等的话 没有优惠)") private BigDecimal price; @ApiModelProperty(value = "苹果支付价格") private BigDecimal appleAmount; @ApiModelProperty(value = "套餐包含的部位ids 前端忽略") private String ids; @ApiModelProperty(value = "部位") guns-management/pom.xml
@@ -16,6 +16,19 @@ <version>3.23.9</version> </dependency> <dependency> <groupId>com.huawei.apigateway</groupId> <artifactId>java-sdk-core</artifactId> <version>3.2.5</version> <scope>system</scope> <systemPath>${project.basedir}/lib/java-sdk-core-3.2.5.jar</systemPath> </dependency> <!--华为云的obs--> <dependency> <groupId>com.huaweicloud</groupId> <artifactId>esdk-obs-java</artifactId> <version>3.19.5</version> </dependency> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.4.0</version> @@ -43,13 +56,7 @@ <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>com.huawei.apigateway</groupId> <artifactId>java-sdk-core</artifactId> <version>3.2.5</version> <scope>system</scope> <systemPath>${project.basedir}/lib/java-sdk-core-3.2.5.jar</systemPath> </dependency> <dependency> <groupId>com.stylefeng</groupId> <artifactId>guns-core</artifactId> @@ -58,12 +65,7 @@ <groupId>com.stylefeng</groupId> <artifactId>guns-generator</artifactId> </dependency> <!--华为云的obs--> <dependency> <groupId>com.huaweicloud</groupId> <artifactId>esdk-obs-java</artifactId> <version>3.19.5</version> </dependency> <!--spring boot依赖--> <dependency> <groupId>org.springframework.boot</groupId> guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/AppUserController.java
@@ -234,7 +234,8 @@ BigDecimal friendMoney = new BigDecimal("0"); // 查询消费金额 List<BigDecimal> userId = inviteService.selectList(new EntityWrapper<Invite>() .eq("userId", id)).stream().map(Invite::getAmount).collect(Collectors.toList()); .eq("giftUserId", id) .eq("type",1)).stream().map(Invite::getAmount).collect(Collectors.toList()); friendMoney = userId.stream() .reduce(BigDecimal.ZERO, BigDecimal::add); res.setFriendMoney(friendMoney); guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/FitnessController.java
@@ -81,7 +81,6 @@ @ResponseBody @PostMapping("/addOrUpdateType") @ApiOperation(value = "健身类型添加/编辑", tags = {"健身类型管理"}) public ResultUtil addCoupon(FitnessType fitnessType) { if (fitnessType.getId()==null){ // 添加 @@ -132,30 +131,51 @@ packageDetailVO.setTotal(aPackage.getTotal()); packageDetailVO.setAmount(aPackage.getAmount()); packageDetailVO.setPrice(aPackage.getPrice()); packageDetailVO.setAppleAmount(aPackage.getAppleAmount()); if (StringUtils.hasLength(aPackage.getPositions())){ String[] split = aPackage.getPositions().split(","); String[] split1 = aPackage.getDifficulty().split(","); // 遍历部位ids for (String s : aPackage.getPositions().split(",")) { for (int i = 0; i < split.length; i++) { FitnessPositionVO fitnessPositionVO = new FitnessPositionVO(); // 查询部位 FitnessPosition fitnessPosition = fitnessPositionService.selectById(Integer.valueOf(s)); if (fitnessPosition.getIsDelete() == 1){ continue; } FitnessPosition fitnessPosition = fitnessPositionService.selectById(Integer.valueOf(split[i])); if (fitnessPosition!=null){ fitnessPositionVO.setId(fitnessPosition.getId()); if (fitnessPosition.getIsDelete() == 1){ continue; } fitnessPositionVO.setName(fitnessPosition.getName()); // 查询部位名称 FitnessType fitnessType = fitnessTypeService.selectById(fitnessPosition.getTypeId()); if (fitnessType!=null){ if (fitnessType.getIsDelete() == 1){ continue; } if (fitnessType!=null){ fitnessPositionVO.setTypeName(fitnessType.getName()); } fitnessPositionVO.setAmount(fitnessPosition.getAmount()); switch (split1[i]){ case "0": fitnessPositionVO.setAmount(fitnessPosition.getAmount()); break; case "1": fitnessPositionVO.setAmount(fitnessPosition.getAppleAmount2()); break; case "2": fitnessPositionVO.setAmount(fitnessPosition.getAmount3()); break; case "3": fitnessPositionVO.setAmount(fitnessPosition.getAmount4()); break; case "4": fitnessPositionVO.setAmount(fitnessPosition.getAmount5()); break; } } fitnessPositionVO.setId(fitnessPosition.getId()); fitnessPositionVOS.add(fitnessPositionVO); } } packageDetailVO.setTypes(fitnessPositionVOS); return ResultUtil.success(packageDetailVO); @@ -165,8 +185,56 @@ @ApiOperation(value = "选择部位", tags = {"健身套餐管理"}) public ResultUtil<PageInfo<FitnessPositionVO> > selectPosition(FitnessPositionQuery req) { List<FitnessPositionVO> res = packageService.selectPosition(req); List<FitnessPositionVO> fitnessPositionVOS = new ArrayList<>(); for (FitnessPositionVO re : res) { FitnessPositionVO fitnessPositionVO = new FitnessPositionVO(); fitnessPositionVO.setId(re.getId()); fitnessPositionVO.setName(re.getName()); fitnessPositionVO.setTypeName(re.getTypeName()); fitnessPositionVO.setTypeId(re.getTypeId()); fitnessPositionVO.setDifficulty("1"); fitnessPositionVO.setAmount(re.getAmount()); fitnessPositionVO.setAppleAmount(re.getAppleAmount()); fitnessPositionVOS.add(fitnessPositionVO); FitnessPositionVO fitnessPositionVO2 = new FitnessPositionVO(); fitnessPositionVO2.setId(re.getId()); fitnessPositionVO2.setName(re.getName()); fitnessPositionVO2.setTypeName(re.getTypeName()); fitnessPositionVO2.setTypeId(re.getTypeId()); fitnessPositionVO2.setDifficulty("2"); fitnessPositionVO2.setAmount(re.getAmount2()); fitnessPositionVO2.setAppleAmount(re.getAppleAmount2()); fitnessPositionVOS.add(fitnessPositionVO2); FitnessPositionVO fitnessPositionVO3 = new FitnessPositionVO(); fitnessPositionVO3.setId(re.getId()); fitnessPositionVO3.setName(re.getName()); fitnessPositionVO3.setTypeName(re.getTypeName()); fitnessPositionVO3.setTypeId(re.getTypeId()); fitnessPositionVO3.setDifficulty("3"); fitnessPositionVO3.setAmount(re.getAmount3()); fitnessPositionVO3.setAppleAmount(re.getAppleAmount3()); fitnessPositionVOS.add(fitnessPositionVO3); FitnessPositionVO fitnessPositionVO4 = new FitnessPositionVO(); fitnessPositionVO4.setId(re.getId()); fitnessPositionVO4.setName(re.getName()); fitnessPositionVO4.setTypeName(re.getTypeName()); fitnessPositionVO4.setTypeId(re.getTypeId()); fitnessPositionVO4.setDifficulty("4"); fitnessPositionVO4.setAmount(re.getAmount4()); fitnessPositionVO4.setAppleAmount(re.getAppleAmount4()); fitnessPositionVOS.add(fitnessPositionVO4); FitnessPositionVO fitnessPositionVO5 = new FitnessPositionVO(); fitnessPositionVO5.setId(re.getId()); fitnessPositionVO5.setName(re.getName()); fitnessPositionVO5.setTypeName(re.getTypeName()); fitnessPositionVO5.setTypeId(re.getTypeId()); fitnessPositionVO5.setDifficulty("5"); fitnessPositionVO5.setAmount(re.getAmount5()); fitnessPositionVO5.setAppleAmount(re.getAppleAmount5()); fitnessPositionVOS.add(fitnessPositionVO5); } // PageHelper.startPage(req.getPageNum(),req.getPageSize()); PageInfo<FitnessPositionVO> info=new PageInfo<>(res); PageInfo<FitnessPositionVO> info=new PageInfo<>(fitnessPositionVOS); return ResultUtil.success(info); } @@ -183,7 +251,6 @@ @PostMapping("/addOrUpdatePosition") @ApiOperation(value = "健身部位添加/编辑", tags = {"健身部位管理"}) public ResultUtil addCoupon(FitnessPosition fitnessPosition) { if (fitnessPosition.getId()==null){ if (fitnessPosition.getName().equals("全身")){ // 勾选的全身 判断这个类型是否已经有名为全身的部位了 @@ -264,14 +331,13 @@ List<FitnessPosition> positions = fitnessPositionService.selectList(new EntityWrapper<FitnessPosition>() .eq("typeId", id) .eq("isDelete", 0)); if ( positions.size()>0){ if (positions.size()>0){ return ResultUtil.error("当前类型被使用,无法删除"); } FitnessType fitnessPosition = fitnessTypeService.selectById(id); fitnessPosition.setIsDelete(1); fitnessTypeService.updateById(fitnessPosition); return ResultUtil.success("删除成功"); } @ResponseBody @PostMapping("/deletePackage") guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/OssController.java
@@ -26,6 +26,7 @@ String s = ObsUploadUtil.obsUpload(file); return s; } @PostMapping("/uploadVideo") @ApiOperation(value = "视频上传",tags = "文件上传") public String uploadVideo(@RequestParam("file") MultipartFile file) throws Exception { guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/SysDeptController.java
@@ -72,8 +72,7 @@ public List<Dept> tree() { List<ZTreeNode> tree = this.deptService.tree(); tree.add(ZTreeNode.createParent()); return deptService.selectList(null); return deptService.selectList(null); // return tree; } @Autowired guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/SysRoleController.java
@@ -54,7 +54,6 @@ @ApiOperation(value = "列表", tags = {"后台-角色管理"}) @ResponseBody public ResultUtil<PageInfo<Map>> list(DeptQuery req) { // PageHelper.startPage(req.getPageNum(),req.getPageSize()); List<Map<String, Object>> roles = this.roleService.selectRoles(req.getDeptName()); PageInfo<Map> info=new PageInfo<>(roles); return ResultUtil.success(info); @@ -170,22 +169,22 @@ Role role = roleService.selectById(roleId); return ResultUtil.success("分配成功"); } private List<ZTreeNode> getParent(List<ZTreeNode> roleTreeListByUserId,List<ZTreeNode> parent){ List<ZTreeNode> result = new ArrayList<>(); for (ZTreeNode zTreeNode : parent) { List<ZTreeNode> children = roleTreeListByUserId.stream().filter(e -> e.getpId().equals(zTreeNode.getId())).collect(Collectors.toList()); if(CollectionUtils.isEmpty(children)){ zTreeNode.setChildren(children); }else { getParent(roleTreeListByUserId,children); } ZTreeNode zTreeNode1 = new ZTreeNode(); BeanUtils.copyProperties(zTreeNode,zTreeNode1); result.add(zTreeNode1); } return result; } // private List<ZTreeNode> getParent(List<ZTreeNode> roleTreeListByUserId,List<ZTreeNode> parent){ // List<ZTreeNode> result = new ArrayList<>(); // for (ZTreeNode zTreeNode : parent) { // // List<ZTreeNode> children = roleTreeListByUserId.stream().filter(e -> e.getpId().equals(zTreeNode.getId())).collect(Collectors.toList()); // if(CollectionUtils.isEmpty(children)){ // zTreeNode.setChildren(children); // }else { // getParent(roleTreeListByUserId,children); // } // ZTreeNode zTreeNode1 = new ZTreeNode(); // BeanUtils.copyProperties(zTreeNode,zTreeNode1); // result.add(zTreeNode1); // } // return result; // } guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/SystemController.java
@@ -106,7 +106,7 @@ @ResponseBody @PostMapping("/agreement") @ApiOperation(value = "协议", tags = {"协议管理"}) @ApiOperation(value = " ", tags = {"协议管理"}) @ApiImplicitParams({ @ApiImplicitParam(value = "类型1=用户协议 2=隐私协议 3=注销协议 4=关于我们", name = "type", required = true), @ApiImplicitParam(value = "内容(该字段不传的时候为查看,传了为修改)", name = "content"), @@ -265,28 +265,28 @@ }) public ResultUtil addRedPackage(BigDecimal amount) { // 添加发放红包记录 RedPackage redPackage = new RedPackage(); redPackage.setAmount(amount); redPackage.setInsertUserId(Objects.requireNonNull(ShiroKit.getUser()).id); redPackage.setInsertTime(new Date()); redPackageService.insert(redPackage); // 给每个用户的余额增加响应的金额 List<AppUser> users = appUserService.selectList(new EntityWrapper<AppUser>() .eq("state", 1)); for (AppUser user : users) { BigDecimal balance = user.getBalance(); BigDecimal add = balance.add(amount); user.setBalance(add); appUserService.updateById(user); // 给用户发消息 Message message = new Message(); message.setUserId(user.getId()); message.setType(1); message.setContent("系统发送红包¥"+amount+"到账至您的余额"); message.setInsertTime(new Date()); message.setIsRead(0); messageService.insert(message); } // RedPackage redPackage = new RedPackage(); // redPackage.setAmount(amount); // redPackage.setInsertUserId(Objects.requireNonNull(ShiroKit.getUser()).id); // redPackage.setInsertTime(new Date()); // redPackageService.insert(redPackage); // // 给每个用户的余额增加响应的金额 // List<AppUser> users = appUserService.selectList(new EntityWrapper<AppUser>() // .eq("state", 1)); // for (AppUser user : users) { // BigDecimal balance = user.getBalance(); // BigDecimal add = balance.add(amount); // user.setBalance(add); // appUserService.updateById(user); // // 给用户发消息 // Message message = new Message(); // message.setUserId(user.getId()); // message.setType(1); // message.setContent("系统发送红包¥"+amount+"到账至您的余额"); // message.setInsertTime(new Date()); // message.setIsRead(0); // messageService.insert(message); // } return ResultUtil.success("发放成功"); } } guns-management/src/main/java/com/stylefeng/guns/modular/code/controller/UserController.java
@@ -3,13 +3,11 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.stylefeng.guns.core.base.tips.ErrorTip; import com.stylefeng.guns.core.common.annotion.BussinessLog; import com.stylefeng.guns.core.common.constant.Const; import com.stylefeng.guns.core.common.constant.dictmap.UserDict; import com.stylefeng.guns.core.common.constant.state.ManagerStatus; import com.stylefeng.guns.core.common.exception.BizExceptionEnum; import com.stylefeng.guns.core.exception.GunsException; import com.stylefeng.guns.core.log.LogManager; @@ -24,7 +22,6 @@ import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.system.dao.UserMapper; import com.stylefeng.guns.modular.system.dto.TreeBean; import com.stylefeng.guns.modular.system.factory.UserFactory; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.transfer.UserDto; @@ -40,19 +37,16 @@ import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ByteSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.cache.CacheProperties; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import sun.security.util.Password; import javax.naming.NoPermissionException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import javax.xml.crypto.Data; import java.util.*; import static com.stylefeng.guns.core.support.HttpKit.getIp; @@ -305,7 +299,6 @@ ShiroKit.getSession().setAttribute("sessionFlag", true); System.out.println(ShiroKit.getUser().getName()); List<TreeBean> root = new ArrayList<>(); guns-management/src/main/java/com/stylefeng/guns/modular/system/controller/LoginLogController.java
@@ -4,8 +4,6 @@ import com.baomidou.mybatisplus.plugins.Page; import com.stylefeng.guns.core.base.controller.BaseController; import com.stylefeng.guns.core.common.annotion.BussinessLog; import com.stylefeng.guns.core.common.annotion.Permission; import com.stylefeng.guns.core.common.constant.Const; import com.stylefeng.guns.core.common.constant.factory.PageFactory; import com.stylefeng.guns.core.mutidatasource.annotion.DataSource; import com.stylefeng.guns.modular.system.model.LoginLog; guns-management/src/main/java/com/stylefeng/guns/modular/system/dao/AppUserMapper.java
@@ -6,6 +6,7 @@ import com.stylefeng.guns.modular.system.model.AppUser; import com.stylefeng.guns.modular.system.vo.InviteUserVO; import com.stylefeng.guns.modular.system.vo.TeamDetailVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; guns-management/src/main/java/com/stylefeng/guns/modular/system/model/FitnessPosition.java
@@ -44,10 +44,39 @@ /** * 基础价格 */ @ApiModelProperty(value = "基础价格") @ApiModelProperty(value = "基础价格H1") private BigDecimal amount; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H2") private BigDecimal amount2; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H3") private BigDecimal amount3; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H4") private BigDecimal amount4; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H5") private BigDecimal amount5; @ApiModelProperty(value = "ios用 苹果价格H1") private BigDecimal appleAmount; @ApiModelProperty(value = "ios用 苹果价格H2") private BigDecimal appleAmount2; @ApiModelProperty(value = "ios用 苹果价格H3") private BigDecimal appleAmount3; @ApiModelProperty(value = "ios用 苹果价格H4") private BigDecimal appleAmount4; @ApiModelProperty(value = "ios用 苹果价格H5") private BigDecimal appleAmount5; public Integer getId() { return id; guns-management/src/main/java/com/stylefeng/guns/modular/system/model/Package.java
@@ -51,7 +51,13 @@ */ @ApiModelProperty(value = "套餐价") private BigDecimal price; /** * 优惠价 */ @ApiModelProperty(value = "ios用 苹果的价格") private BigDecimal appleAmount; @ApiModelProperty(value = "选择部位的难度 和部位ids一一对应") private String difficulty; public Integer getId() { return id; guns-management/src/main/java/com/stylefeng/guns/modular/system/util/ObsUploadUtil.java
@@ -16,6 +16,7 @@ public static String accessKeySecret = "CustHR4B9XKdT7hGcEYEpV9UVUoc4pmUhnHckU9h"; public static String bucketName = "jkjianshen"; public static String oss_domain = "https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/"; // public static String oss_domain = "http://cdn.jkcyl.cn/"; // 创建ObsClient实例 public static ObsClient obsClient = new ObsClient(accessKeyId, accessKeySecret, endPoint); @@ -27,7 +28,14 @@ ObjectMetadata meta = new ObjectMetadata();// 创建上传Object的Metadata meta.setContentLength(file.getSize()); // 必须设置ContentLength String originalFilename = file.getOriginalFilename(); fileName = UUID.randomUUID().toString().replaceAll("-","") + originalFilename.subSequence(originalFilename.lastIndexOf("."), originalFilename.length()); if (originalFilename.contains("apk")){ fileName = "bf2fe5c5499341e5bc0d56c0c7d5fb2e.apk"; System.err.println("apk"); }else{ fileName = UUID.randomUUID().toString().replaceAll("-","") + originalFilename.subSequence(originalFilename.lastIndexOf("."), originalFilename.length()); } obsClient.putObject(bucketName,"admin/"+fileName,content,meta);// 上传Object. if(fileName != null && !"".equals(fileName)){ System.out.println(fileName); guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/FitnessPositionVO.java
@@ -27,8 +27,44 @@ private String typeName; @ApiModelProperty(value = "所属类型id") private Integer typeId; @ApiModelProperty(value = "基础价格") @ApiModelProperty(value = "难度 H1 H2。。。") private String difficulty; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H1") private BigDecimal amount; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H2") private BigDecimal amount2; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H3") private BigDecimal amount3; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H4") private BigDecimal amount4; /** * 基础价格 */ @ApiModelProperty(value = "基础价格H5") private BigDecimal amount5; @ApiModelProperty(value = "ios用 苹果价格H1") private BigDecimal appleAmount; @ApiModelProperty(value = "ios用 苹果价格H2") private BigDecimal appleAmount2; @ApiModelProperty(value = "ios用 苹果价格H3") private BigDecimal appleAmount3; @ApiModelProperty(value = "ios用 苹果价格H4") private BigDecimal appleAmount4; @ApiModelProperty(value = "ios用 苹果价格H5") private BigDecimal appleAmount5; @Override protected Serializable pkVal() { return null; guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/OrderListVO.java
@@ -3,7 +3,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import sun.awt.image.BufferedImageGraphicsConfig; import java.math.BigDecimal; import java.util.Date; guns-management/src/main/java/com/stylefeng/guns/modular/system/vo/PackageDetailVO.java
@@ -30,6 +30,8 @@ private BigDecimal amount; @ApiModelProperty(value = "套餐价格") private BigDecimal price; @ApiModelProperty(value = "ios用 苹果的价格") private BigDecimal appleAmount; @ApiModelProperty(value = "选择类型") private List<FitnessPositionVO> types;