From 5dc40fcd64b0513150f1d8335ab849e6d8cdc28e Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期五, 04 七月 2025 19:42:49 +0800 Subject: [PATCH] 支付版本更新 根据资金流向使用V2或V3服务商版本支付 --- cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/controller/WorldCupController.java | 242 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 231 insertions(+), 11 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 102a74f..0ade7ca 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 @@ -1,6 +1,7 @@ package com.dsh.communityWorldCup.controller; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.communityWorldCup.entity.*; @@ -22,6 +23,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; @@ -30,13 +33,16 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; 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.util.*; import java.util.stream.Collectors; @@ -98,7 +104,77 @@ private GameClient gameClient; + /** + * 查询社区世界杯收入--管理后台 + * @param storeId + * @return + */ + @ResponseBody + @PostMapping("/worldCup/getWorldCupIncome") + public List<WorldCupIncomeVO> getWorldCupIncome(@RequestBody WorldCupQuery query){ + String STime = null; + String ETime = null; + if (StringUtils.hasLength(query.getTime())) { + STime = query.getTime().split(" - ")[0] + " 00:00:00"; + ETime = query.getTime().split(" - ")[1] + " 23:59:59"; + } + QueryWrapper<WorldCupPayment> in = new QueryWrapper<WorldCupPayment>() + .eq("payStatus", 2) + ; + if (STime != null){ + in.between("payTime", STime, ETime); + } + if (query.getUserIds() != null){ + if (!query.getUserIds().isEmpty()){ + in.in("appUserId", query.getUserIds()); + } + } + + if (query.getAmount() != null){ + in.le("amount", query.getAmount().toString()); + } + List<WorldCupPayment> list = worldCupPaymentService.list(in); + List<WorldCupIncomeVO> res = new ArrayList<>(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (WorldCupPayment worldCupPayment : list) { + if (worldCupPayment.getPayType() == 0){ + // 不计算免费的 + continue; + } + WorldCupIncomeVO worldCupIncomeVO = new WorldCupIncomeVO(); + WorldCup byId = worldCupService.getById(worldCupPayment.getWorldCupId()); + if (byId!=null){ + worldCupIncomeVO.setProvince(byId.getProvince()); + worldCupIncomeVO.setCity(byId.getCity()); + List<WorldCupStore> worldCupId = worldCupStoreService.list(new QueryWrapper<WorldCupStore>() + .eq("worldCupId", byId.getId())); + StringBuilder temp = new StringBuilder(); + for (WorldCupStore worldCupStore : worldCupId) { + Store store = storeClient.queryStoreById(worldCupStore.getStoreId()); + if (store!=null){ + temp.append(store.getName()).append(","); + } + } + if (temp.length() > 0){ + worldCupIncomeVO.setStoreName(temp.substring(0, temp.length() - 1)); + } + } + AppUser appUser = appUserClient.getAppUser(worldCupPayment.getAppUserId()); + worldCupIncomeVO.setId(worldCupPayment.getId().toString()); + if (appUser!=null){ + worldCupIncomeVO.setUserName(appUser.getName()); + worldCupIncomeVO.setPhone(appUser.getPhone()); + } + if (worldCupPayment.getPayTime()!=null){ + String format = simpleDateFormat.format(worldCupPayment.getPayTime()); + worldCupIncomeVO.setPayTime(format); + } + worldCupIncomeVO.setAmount(worldCupPayment.getAmount().toString()); + res.add(worldCupIncomeVO); + } + return res; + } /** * 根据门店id获取门店关系数据 @@ -109,13 +185,20 @@ @PostMapping("/worldCup/getWorldCupStoreListByStoreId") public List<WorldCupStoreVO> getWorldCupStoreListByStoreId(@RequestBody Integer storeId){ List<WorldCupStoreVO> res = new ArrayList<>(); - - List<WorldCupStore> storeId1 = worldCupStoreService.list(new QueryWrapper<WorldCupStore>().eq("storeId", storeId)); + List<WorldCupStore> storeId1 = worldCupStoreService.list( + new QueryWrapper<WorldCupStore>() + .eq("storeId", storeId)); for (WorldCupStore worldCupStore : storeId1) { WorldCupStoreVO worldCupStoreVO = new WorldCupStoreVO(); BeanUtils.copyProperties(worldCupStore,worldCupStoreVO); // 查询世界杯活动名称 WorldCup byId = worldCupService.getById(worldCupStore.getWorldCupId()); + if (byId==null){ + continue; + } + if (byId.getStatus()==3 || byId.getStatus()==4){ + continue; + } worldCupStoreVO.setName(byId.getName()); res.add(worldCupStoreVO); } @@ -369,23 +452,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{ @@ -605,6 +731,67 @@ public Map<String, Object> getWorldCupListAll(@RequestBody WorldCupListAll worldCupListAll){ return worldCupService.getWorldCupListAll(worldCupListAll); } + /** + * 根据门店ids 获取归属学员 + * @param storeIds + * @return + */ + @ResponseBody + @PostMapping("/worldCup/getStudentIds") + public List<Integer> getStudentIds(@RequestBody StoreIds storeIds){ + List<Integer> res = new ArrayList<>(); + + // 获取门店ids 所举办的世界杯ids 查询学员参赛 + List<Integer> collect = worldCupStoreService.list(new QueryWrapper<WorldCupStore>() + .in("storeId", storeIds.getStoreIds())).stream() + .map(WorldCupStore::getWorldCupId).collect(Collectors.toList()); + List<WorldCupPayment> list = worldCupPaymentService.list(new QueryWrapper<WorldCupPayment>() + .in("worldCupId", collect) + .eq("payStatus", 2)); + for (WorldCupPayment worldCupPayment : list) { + JSONArray jsonArray = JSON.parseArray(worldCupPayment.getEntrant()); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + Integer isStudent = jsonObject.getInteger("isStudent"); + if (isStudent!=1){ + continue; + } + Long id = jsonObject.getLong("id"); + String string = id.toString(); + res.add(Integer.parseInt(string)); + } + } + List<Long> collect1 = worldCupCompetitorService.list(new QueryWrapper<WorldCupCompetitor>() + .in("worldCupId", collect) + .eq("participantType", 1)).stream() + .map(WorldCupCompetitor::getParticipantId).collect(Collectors.toList()); + // 将collect1中的数据全部转化为Integer类型 + List<Integer> temp = new ArrayList<>(); + temp = collect1.stream().map(Long::intValue).collect(Collectors.toList()); + res.addAll(temp); + return res; + } + /** + * 根据门店ids 获取归属用户 + * @param storeIds + * @return + */ + @ResponseBody + @PostMapping("/worldCup/getUserIds") + public List<Integer> getUserIds(@RequestBody StoreIds storeIds){ + List<Integer> res = new ArrayList<>(); + // 获取门店ids 所举办的世界杯ids 查询用户 + List<Integer> collect = worldCupStoreService.list(new QueryWrapper<WorldCupStore>() + .in("storeId", storeIds.getStoreIds())).stream() + .map(WorldCupStore::getWorldCupId).collect(Collectors.toList()); + List<WorldCupPayment> list = worldCupPaymentService.list(new QueryWrapper<WorldCupPayment>() + .in("worldCupId", collect) + .eq("payStatus", 2)); + for (WorldCupPayment worldCupPayment : list) { + res.add(worldCupPayment.getAppUserId()); + } + return res; + } @@ -632,6 +819,22 @@ worldCup.setProvinceCode(provinceCode); worldCup.setCity(city.replace("市", "")); worldCup.setCityCode(cityCode); + String[] split = worldCup.getPayType().split(","); + List<String> strings = Arrays.asList(split); + if(strings.contains("0")){ + worldCup.setCash(null); + worldCup.setClassHour(null); + worldCup.setPaiCoin(null); + } + if(!strings.contains("1")){ + worldCup.setCash(null); + } + if(!strings.contains("2")){ + worldCup.setPaiCoin(null); + } + if(!strings.contains("3")){ + worldCup.setClassHour(null); + } worldCupService.save(worldCup); return worldCup.getId(); } @@ -677,6 +880,22 @@ WorldCup worldCup1 = worldCupService.getById(worldCup2.getId()); worldCup2.setCreateTime(worldCup1.getCreateTime()); worldCup2.setMatchNumber(worldCup1.getMatchNumber()); + String[] split = worldCup2.getPayType().split(","); + List<String> strings = Arrays.asList(split); + if(strings.contains("0")){ + worldCup2.setCash(null); + worldCup2.setClassHour(null); + worldCup2.setPaiCoin(null); + } + if(!strings.contains("1")){ + worldCup2.setCash(null); + } + if(!strings.contains("2")){ + worldCup2.setPaiCoin(null); + } + if(!strings.contains("3")){ + worldCup2.setClassHour(null); + } worldCupService.updateWorldCupAll(worldCup2); return worldCup2.getId(); } @@ -734,6 +953,7 @@ @ResponseBody @PostMapping("/base/worldCup/endWorldCupCallback") public void endWorldCupCallback(String custom, Integer red_score, Integer blue_score){ + log.warn("世界杯游戏成绩回调:custom->" + custom + ",red_score->" + red_score + ",blue_score->" + blue_score); worldCupCompetitorService.endWorldCupCallback(custom, red_score, blue_score); } -- Gitblit v1.7.1