无关风月
23 小时以前 5dc40fcd64b0513150f1d8335ab849e6d8cdc28e
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);
    }