From a540a342416302805adfb1599599bbbbaa191030 Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期五, 08 八月 2025 23:42:13 +0800 Subject: [PATCH] 赛事模块 --- cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java | 215 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 203 insertions(+), 12 deletions(-) diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java index ccec4d5..c2faace 100644 --- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java +++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.communityWorldCup.entity.*; import com.dsh.communityWorldCup.feignclient.account.AppUserClient; @@ -23,6 +24,8 @@ import com.dsh.communityWorldCup.util.PayMoneyUtil; import com.dsh.communityWorldCup.util.ResultUtil; import com.dsh.communityWorldCup.util.TokenUtil; +import com.dsh.communityWorldCup.util.wx.WxV3PayConfig; +import com.wechat.pay.contrib.apache.httpclient.util.AesUtil; import groovy.util.logging.Log4j; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -37,9 +40,12 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -102,7 +108,6 @@ /** * 查询社区世界杯收入--管理后台 - * @param storeId * @return */ @ResponseBody @@ -272,6 +277,16 @@ if(0 == isStudent){ isStudent = 2; } + WorldCup worldCup = worldCupService.getById(worldCupPeople.getWorldCupId()); + if(null == worldCup){ + return ResultUtil.error("当前比赛不存在"); + } + if(worldCup.getStartTime().getTime()>System.currentTimeMillis() || worldCup.getEndTime().getTime()<System.currentTimeMillis()){ + return ResultUtil.error("二维码仅支持在赛事有效期使用"); + } + + + WorldCupPaymentParticipant worldCupPaymentParticipant = worldCupPaymentParticipantService.getOne(new QueryWrapper<WorldCupPaymentParticipant>() .eq("worldCupId", worldCupPeople.getWorldCupId()).eq("participantId", id).eq("participantType", isStudent) .orderByDesc("createTime").last(" limit 0, 1")); @@ -349,6 +364,15 @@ }) public ResultUtil startWorldCup(StartWorldCup startWorldCup){ return worldCupService.startWorldCup(startWorldCup); + } + @ResponseBody + @PostMapping("/api/worldCup/endWorldCup") + @ApiOperation(value = "裁判结束比赛【3.1】", tags = {"APP-个人中心"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") + }) + public ResultUtil endWorldCup(String custom, Integer redScore, Integer blueScore){ + return worldCupService.endWorldCup(custom,redScore,blueScore); } @@ -448,23 +472,66 @@ } } - + @ResponseBody + @PostMapping("/base/worldCup/wxPayWorldCupCallback") + public void wxPayWorldCupCallback(HttpServletRequest request, HttpServletResponse response){ + System.err.println("微信回调"); + try { + Map<String, String> map = payMoneyUtil.weixinpayCallback(request); + if (null != map) { + String code = map.get("out_trade_no"); + String transaction_id = map.get("transaction_id"); + String result = map.get("result"); + ResultUtil resultUtil = worldCupService.paymentWorldCupCallback(code, transaction_id); + if (resultUtil.getCode() == 200) { + PrintWriter out = response.getWriter(); + out.println(result); + out.flush(); + out.close(); + } else { + log.error("社区世界杯报名微信支付回业务处理异常:" + resultUtil.getMsg()); + } + } else { + log.error("社区世界杯报名微信支付回调解析异常"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } /** * 微信支付回调 */ @ResponseBody - @PostMapping("/base/worldCup/wxPayWorldCupCallback") - public void wxPayWorldCupCallback(HttpServletRequest request, HttpServletResponse response){ + @PostMapping("/base/worldCup/wxPayWorldCupCallback1") + public void wxPayWorldCupCallback1(HttpServletRequest request, HttpServletResponse response){ try { - Map<String, String> map = payMoneyUtil.weixinpayCallback(request); - if(null != map){ - String code = map.get("out_trade_no"); - String transaction_id = map.get("transaction_id"); - String result = map.get("result"); + System.err.println("微信回调"); + 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); + JSONObject jsonObject = JSONObject.parseObject(requestBody.toString()); + JSONObject resource = jsonObject.getJSONObject("resource"); + + AesUtil aesUtil = new AesUtil(WxV3PayConfig.apiV3Key.getBytes(StandardCharsets.UTF_8)); + String decryptedData = aesUtil.decryptToString(resource.getString("associated_data").getBytes(StandardCharsets.UTF_8), resource.getString("nonce").getBytes(StandardCharsets.UTF_8), + resource.getString("ciphertext")); + System.err.println("微信解密的字符串信息" + decryptedData); + JSONObject jsonInfo = (JSONObject) JSONObject.parse(decryptedData); + String code = jsonInfo.getString("out_trade_no"); + String transaction_id = jsonInfo.getString("transaction_id"); + String trade_state = jsonInfo.getString("trade_state"); + if (trade_state.equals("SUCCESS")) { ResultUtil resultUtil = worldCupService.paymentWorldCupCallback(code, transaction_id); if(resultUtil.getCode() == 200){ PrintWriter out = response.getWriter(); - out.println(result); + out.println("SUCCESS"); out.flush(); out.close(); }else{ @@ -607,7 +674,7 @@ @ApiImplicitParam(name = "id", value = "列表中的id", required = true, dataType = "Long"), @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) - public ResultUtil cancelMyWorldCup(Long id){ + public ResultUtil cancelMyWorldCup(Long id) throws Exception { return worldCupPaymentService.cancelMyWorldCup(id); } @@ -641,6 +708,45 @@ } worldCupRank.setAppUserId(uid); List<WorldCupRankVo> worldCupRank1 = worldCupCompetitorService.getWorldCupRank(worldCupRank); + return ResultUtil.success(worldCupRank1); + }catch (Exception e){ + e.printStackTrace(); + return ResultUtil.runErr(); + } + } + + @ResponseBody + @PostMapping("/api/worldCup/getWorldCupListFromRank") + @ApiOperation(value = "获取报名的赛事 排名使用【3.1】", tags = {"APP-个人中心"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") + }) + public ResultUtil<List<WorldCupListVo>> getWorldCupListFromRank(MyWorldCupList myWorldCupList){ + try { + Integer uid = tokenUtil.getUserIdFormRedis(); + if(null == uid){ + return ResultUtil.tokenErr(); + } + List<WorldCupListVo> worldCupRank1 = worldCupCompetitorService.getWorldCupListFromRank(myWorldCupList); + return ResultUtil.success(worldCupRank1); + }catch (Exception e){ + e.printStackTrace(); + return ResultUtil.runErr(); + } + } + @ResponseBody + @PostMapping("/api/worldCup/getWorldCupCodeListId") + @ApiOperation(value = "获取赛事的赛点 非智慧比赛用 【3.1】", tags = {"APP-个人中心"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") + }) + public ResultUtil<List<WorldCupCodeListVo>> getWorldCupCodeListId(Integer worldCupId){ + try { + Integer uid = tokenUtil.getUserIdFormRedis(); + if(null == uid){ + return ResultUtil.tokenErr(); + } + List<WorldCupCodeListVo> worldCupRank1 = worldCupCompetitorService.getWorldCupCodeListId(worldCupId); return ResultUtil.success(worldCupRank1); }catch (Exception e){ e.printStackTrace(); @@ -895,7 +1001,7 @@ */ @ResponseBody @PostMapping("/worldCup/cancelWorldCupRefund") - public void cancelWorldCupRefund(@RequestBody Integer id){ + public void cancelWorldCupRefund(@RequestBody Integer id) throws Exception { worldCupService.cancelWorldCupRefund(id); } @@ -939,6 +1045,54 @@ out.println(result); out.flush(); out.close(); + } + } + /** + * 取消赛事后微信退款回调微信V3回调 + * @param request + * @param response + */ + @ResponseBody + @PostMapping("/base/worldCup/wxRefundWorldCupCallback1") + public void wxRefundWorldCupCallback1(HttpServletRequest request, HttpServletResponse response){ + try { + System.err.println("微信回调"); + 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); + JSONObject jsonObject = JSONObject.parseObject(requestBody.toString()); + JSONObject resource = jsonObject.getJSONObject("resource"); + + AesUtil aesUtil = new AesUtil(WxV3PayConfig.apiV3Key.getBytes(StandardCharsets.UTF_8)); + String decryptedData = aesUtil.decryptToString(resource.getString("associated_data").getBytes(StandardCharsets.UTF_8), resource.getString("nonce").getBytes(StandardCharsets.UTF_8), + resource.getString("ciphertext")); + System.err.println("微信解密的字符串信息" + decryptedData); + JSONObject jsonInfo = (JSONObject) JSONObject.parse(decryptedData); + String code = jsonInfo.getString("out_trade_no"); + String transaction_id = jsonInfo.getString("transaction_id"); + String refund_status = jsonInfo.getString("refund_status"); + String out_refund_no = jsonInfo.getString("out_refund_no"); + if (refund_status.equals("SUCCESS")) { + WorldCupPayment worldCupPayment = worldCupPaymentService.getOne(new QueryWrapper<WorldCupPayment>().eq("code", out_refund_no)); + worldCupPayment.setRefundOrderNo(code); + worldCupPayment.setRefundTime(new Date()); + worldCupPayment.setPayStatus(3); + worldCupPayment.setWorldCupId(null); + worldCupPaymentService.updateById(worldCupPayment); + PrintWriter out = response.getWriter(); + out.write("SUCCESS"); + out.flush(); + out.close(); + } + } catch (Exception e) { + e.printStackTrace(); } } @@ -1066,4 +1220,41 @@ .last(" and createTime between '" + sdf.format(getWorldCupPayment.getStartTime()) + "' and '" + sdf.format(getWorldCupPayment.getEndTime()) + "' order by createTime desc")); return list; } + + + @PostMapping("/worldCup/userDetailsOfSearch") + @ResponseBody + public List<WorldCupUserListVo> userDetailsOfSearch(@RequestBody UserDetailsOfSearch search){ + // 已报名的用户 + List<WorldCupPaymentParticipant> list = worldCupPaymentParticipantService.list(new LambdaQueryWrapper<WorldCupPaymentParticipant>().eq(WorldCupPaymentParticipant::getWorldCupId, search.getId()) + .eq(WorldCupPaymentParticipant::getAlreadyEntered, 0)); + ArrayList<WorldCupUserListVo> worldCupUserListVos = new ArrayList<>(); + if(list.size()>0){ + List<Integer> collect = list.stream().map(WorldCupPaymentParticipant::getAppUserId).collect(Collectors.toList()); + search.setUseIds(collect); + List<AppUser> appUsers = appUserClient.queryAppUserByIds(search); + + for (AppUser appUser : appUsers) { + WorldCupUserListVo worldCupUserListVo = new WorldCupUserListVo(); + WorldCupPaymentParticipant worldCupPaymentParticipant = list.stream().filter(e -> e.getAppUserId().equals(appUser.getId())).findFirst().orElse(null); + if(worldCupPaymentParticipant!=null){ + worldCupUserListVo.setId(worldCupPaymentParticipant.getId()); + worldCupUserListVo.setName(appUser.getName()); + worldCupUserListVo.setSex(appUser.getGender() !=null && appUser.getGender()==2?"女":"男"); + worldCupUserListVo.setPhone(appUser.getPhone()); + worldCupUserListVo.setIdCard(appUser.getIdCard()); + // 当前日期和生日计算年龄 + Date birthday = appUser.getBirthday(); + LocalDate now = LocalDate.now(); + if(birthday!=null){ + int age = now.getYear() - birthday.getYear(); + worldCupUserListVo.setAge(age); + } + worldCupUserListVos.add(worldCupUserListVo); + } + } + + } + return worldCupUserListVos; + } } -- Gitblit v1.7.1