liujie
3 天以前 a540a342416302805adfb1599599bbbbaa191030
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;
    }
}