puzhibing
2024-01-30 80b3ea5587ff7ec20541d9ca7c6c28739e4d615b
cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java
@@ -10,10 +10,8 @@
import com.dsh.other.feignclient.account.AppUserClient;
import com.dsh.other.feignclient.account.model.AppUser;
import com.dsh.other.model.QueryMySiteVo;
import com.dsh.other.service.ISiteLockService;
import com.dsh.other.service.TGameConfigService;
import com.dsh.other.service.TGameRecordService;
import com.dsh.other.service.TGameService;
import com.dsh.other.model.User;
import com.dsh.other.service.*;
import com.dsh.other.util.*;
import com.dsh.other.util.httpClinet.HttpResult;
import io.swagger.annotations.ApiImplicitParam;
@@ -48,7 +46,7 @@
    @Autowired
    private TokenUtil tokenUtil;
    @Autowired
    @Resource
    private AppUserClient appUserClient;
    @Autowired
@@ -56,6 +54,12 @@
    @Resource
    private CourseRecordClient courseRecordClient;
    @Autowired
    private IUserService userService;
    @Autowired
    private ISiteBookingService siteBookingService;
    @ResponseBody
@@ -110,9 +114,7 @@
            List<TGame> list = gameService.list(new LambdaQueryWrapper<TGame>().eq(TGame::getSiteId, siteId).eq(TGame::getStoreId, storeId).eq(TGame::getState, 0));
            if (list.size() > 0) {
                Integer id = list.get(0).getId();
//                tGameConfigs = gameConfigService.list(new LambdaQueryWrapper<TGameConfig>().eq(TGameConfig::getOtherId, id));
                tGameConfigs = gameConfigService.listJs(id);
            }
            List<TGameConfig> filteredList = tGameConfigs.stream()
                    .filter(gameConfig -> !gameConfig.getImg().isEmpty())
@@ -123,6 +125,50 @@
            return ResultUtil.runErr();
        }
    }
    @ResponseBody
    @PostMapping("/gameStartupCheck")
    @ApiOperation(value = "扫码启动游戏前的校验(0=不通过,1=通过)", tags = {"用户—游戏"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "三方游戏id", name = "gameId", dataType = "int", required = true),
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
    })
    public ResultUtil<Integer> gameStartupCheck(Integer gameId){
        try {
            Integer uid = tokenUtil.getUserIdFormRedis();
            if (null == uid) {
                return ResultUtil.tokenErr();
            }
            //判断当前用户是否是员工
            AppUser appUser1 = appUserClient.queryAppUser(uid);
            User one = userService.getOne(new QueryWrapper<User>().eq("phone", appUser1.getPhone()).eq("status", 1));
            if (null != one) {
                return ResultUtil.success(1);
            }
            //普通用户校验当前时间是否在预约时间段内
            TGame game = gameService.getById(gameId);
            Integer siteId = game.getSiteId();
            SiteBooking siteBooking = siteBookingService.getOne(new QueryWrapper<SiteBooking>()
                    .eq("state", 1)
                    .in("status", Arrays.asList(1, 2))
                    .eq("appUserId", uid)
                    .eq("siteId", siteId)
                    .last(" and now() between startTime and endTime")
            );
            return ResultUtil.success(null == siteBooking ? 0 : 1);
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    private String smid = "2088330203191220";//平台支付宝商户号
    @Autowired
    private ISiteService siteService;
    @ResponseBody
@@ -142,6 +188,13 @@
            if (null == uid) {
                return ResultUtil.tokenErr();
            }
            //判断当前用户是否是员工
            AppUser appUser1 = appUserClient.queryAppUser(uid);
            User one = userService.getOne(new QueryWrapper<User>().eq("phone", appUser1.getPhone()).eq("status", 1));
            if (null != one) {
                Integer integer = startGame(uid, gameId, spaceId, sutuId);
                return ResultUtil.success();
            }
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
            String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
            TGameConfig config = gameConfigService.getById(configId);
@@ -152,6 +205,7 @@
            tGameRecord.setNumber(code);
            tGameRecord.setTime(new Date());
            gameRecordService.save(tGameRecord);
            if (type == 1) {
                ResultUtil weixinpay = payMoneyUtil.weixinpay("游戏支付", "", code, config.getCash().toString(), "/base/course/weChatPaymentCourseCallback", "APP", "");
                if (weixinpay.getCode() == 200) {
@@ -211,11 +265,21 @@
                }
                return weixinpay;
            } else if (type == 2) {
//                Integer gameId, Integer configId,Integer type,Integer sutuId,Integer spaceId;
                String smid1="";
                String params = uid + "_" + gameId + "_" + spaceId + "_" + sutuId+"_"+code+"_"+configId;
                // 判断这个课包属于哪个门店 属于哪个运营商 根据运营商 id 获取对应的商户号
                TGame game = gameService.getById(gameId);
                String params = uid + "_" + gameId + "_" + spaceId + "_" + sutuId;
                Integer operationId = game.getOperationId();
                if (operationId==0){
                    // 是平台的
                    smid1 = smid;
                }else{
                    String smidByOperatorId = siteService.getSMIDByOperatorId(operationId);
                    smid1 = smidByOperatorId;
                }
                ResultUtil alipay = payMoneyUtil.alipay("游戏支付", "游戏支付", params, code, config.getCash().toString(), "/base/site/gameCallback");
                ResultUtil alipay = payMoneyUtil.alipay(smid1,"游戏支付", "游戏支付", params, code, config.getCash().toString(), "/base/site/gameCallback");
                if (alipay.getCode() == 200) {
                    new Thread(new Runnable() {
                        @Override
@@ -240,9 +304,6 @@
                                         * TRADE_SUCCESS(交易支付成功)、
                                         * TRADE_FINISHED(交易结束,不可退款)
                                         */
//                                        Map<String, String> data1 = resultUtil.getData();
//                                        String s = data1.get("tradeStatus");
//                                        String tradeNo = data1.get("tradeNo");
                                        String tradeNo = resultUtil.getTradeNo();
                                        String s = resultUtil.getTradeStatus();
                                        if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) {
@@ -255,7 +316,6 @@
                                                coursePackagePayment.setOrderNo(tradeNo);
                                                CourseCounsum courseCounsum = new CourseCounsum();
//                                                courseCounsum.setPaymentId(paymentId);
                                                courseCounsum.setChangeType(3);
                                                courseCounsum.setInsertTime(new Date());
                                                courseCounsum.setReason("智慧球场;" + config.getCash());
@@ -265,6 +325,18 @@
                                            }
                                            gameRecordService.updateBatchById(list);
                                            Integer integer = startGame(uid, gameId, spaceId, sutuId);
                                            // 判断这个课包属于哪个门店 属于哪个运营商 根据运营商 id 获取对应的商户号
                                            TGame game = gameService.getById(gameId);
                                            String smid2="";
                                            Integer operationId = game.getOperationId();
                                            if (operationId==0){
                                                // 是平台的
                                                smid2 = smid;
                                            }else{
                                                String smidByOperatorId = siteService.getSMIDByOperatorId(operationId);
                                                smid2 = smidByOperatorId;
                                            }
                                            payMoneyUtil.confirm(smid2,code,tradeNo,config.getCash().toString());
                                            break;
                                        }
                                        if ("WAIT_BUYER_PAY".equals(s)) {
@@ -316,8 +388,6 @@
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }