package com.dsh.other.controller;
|
|
import cn.hutool.http.HttpRequest;
|
import com.alibaba.fastjson.JSONObject;
|
import com.alipay.api.response.AlipayTradeQueryResponse;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.dsh.other.entity.*;
|
import com.dsh.other.feignclient.CourseRecordClient;
|
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.util.*;
|
import com.dsh.other.util.httpClinet.HttpResult;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@RestController
|
@RequestMapping("/api/game")
|
public class GameController {
|
|
@Autowired
|
private TGameRecordService gameRecordService;
|
|
|
@Autowired
|
private TGameService gameService;
|
|
@Autowired
|
private TGameConfigService gameConfigService;
|
|
@Autowired
|
private TokenUtil tokenUtil;
|
|
@Autowired
|
private AppUserClient appUserClient;
|
|
@Autowired
|
private PayMoneyUtil payMoneyUtil;
|
|
@Resource
|
private CourseRecordClient courseRecordClient;
|
|
|
@ResponseBody
|
@PostMapping("/getIntro")
|
@ApiOperation(value = "获取步骤说明", tags = {"用户—游戏"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
|
})
|
public ResultUtil<String> getIntro() {
|
try {
|
|
return ResultUtil.success(gameService.getIntro());
|
} catch (Exception e) {
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
@Autowired
|
private ISiteLockService lockService;
|
|
|
@ResponseBody
|
@PostMapping("/queryGameList")
|
@ApiOperation(value = "获取当前场地的游戏列表配置", tags = {"用户—游戏"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "siteId", name = "siteId", dataType = "int", required = true),
|
@ApiImplicitParam(value = "storeId", name = "storeId", dataType = "int", required = true),
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
|
})
|
public ResultUtil<List<TGameConfig>> queryGameList(Integer siteId, Integer storeId) {
|
try {
|
|
Integer uid = tokenUtil.getUserIdFormRedis();
|
AppUser appUser = appUserClient.queryAppUser(uid);
|
List<TGameConfig> tGameConfigs = new ArrayList<>();
|
|
if (appUser.getAddUserId() == null) {
|
|
|
List<SiteLock> lock = lockService.list(new QueryWrapper<SiteLock>().eq("siteId", siteId));
|
|
Date now = new Date();
|
for (SiteLock siteLock : lock) {
|
if (now.after(siteLock.getStartTime()) && now.before(siteLock.getEndTime())) {
|
return ResultUtil.error("当前场地已被锁定");
|
}
|
}
|
|
}
|
|
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())
|
.collect(Collectors.toList());
|
return ResultUtil.success(filteredList);
|
} catch (Exception e) {
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
@ResponseBody
|
@PostMapping("/payGame")
|
@ApiOperation(value = "支付游戏", tags = {"用户—游戏"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "三方游戏id", name = "gameId", dataType = "int", required = true),
|
@ApiImplicitParam(value = "游戏配置id", name = "configId", dataType = "int", required = true),
|
@ApiImplicitParam(value = "sutuId", name = "sutuId", dataType = "int", required = true),
|
@ApiImplicitParam(value = "spaceId", name = "spaceId", dataType = "int", required = true),
|
@ApiImplicitParam(value = "1微信 2支付宝 3玩湃币 5积分", name = "type", dataType = "int", required = true),
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
|
})
|
public ResultUtil payGame(Integer gameId, Integer configId, Integer type, Integer sutuId, Integer spaceId) {
|
try {
|
Integer uid = tokenUtil.getUserIdFormRedis();
|
if (null == uid) {
|
return ResultUtil.tokenErr();
|
}
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
|
String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
|
TGameConfig config = gameConfigService.getById(configId);
|
TGameRecord tGameRecord = new TGameRecord();
|
tGameRecord.setGameId(gameId);
|
tGameRecord.setPayType(type);
|
tGameRecord.setUserId(uid);
|
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) {
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
try {
|
int num = 1;
|
int wait = 0;
|
while (num <= 10) {
|
int min = 5000;
|
wait += (min * num);
|
Thread.sleep(wait);
|
List<TGameRecord> list = gameRecordService.list(new QueryWrapper<TGameRecord>().eq("code", code).eq("payType", 2));
|
TGameRecord one = list.get(0);
|
|
if (one.getStatus() == 1) {
|
break;
|
}
|
ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, "");
|
if (resultUtil.getCode() == 200 && one.getStatus() == 0) {
|
/**
|
* SUCCESS—支付成功,
|
* REFUND—转入退款,
|
* NOTPAY—未支付,
|
* CLOSED—已关闭,
|
* REVOKED—已撤销(刷卡支付),
|
* USERPAYING--用户支付中,
|
* PAYERROR--支付失败(其他原因,如银行返回失败)
|
*/
|
Map<String, String> data1 = resultUtil.getData();
|
String s = data1.get("trade_state");
|
String transaction_id = data1.get("transaction_id");
|
if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) {
|
break;
|
}
|
if ("SUCCESS".equals(s)) {
|
for (TGameRecord coursePackagePayment : list) {
|
coursePackagePayment.setStatus(1);
|
coursePackagePayment.setMoney(config.getCash());
|
coursePackagePayment.setOrderNo(transaction_id);
|
}
|
gameRecordService.updateBatchById(list);
|
Integer integer = startGame(uid, gameId, spaceId, sutuId);
|
break;
|
}
|
if ("USERPAYING".equals(s)) {
|
num++;
|
}
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}).start();
|
}
|
return weixinpay;
|
} else if (type == 2) {
|
// Integer gameId, Integer configId,Integer type,Integer sutuId,Integer spaceId;
|
|
String params = uid + "_" + gameId + "_" + spaceId + "_" + sutuId;
|
|
ResultUtil alipay = payMoneyUtil.alipay("游戏支付", "游戏支付", params, code, config.getCash().toString(), "/base/site/gameCallback");
|
if (alipay.getCode() == 200) {
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
try {
|
int num = 1;
|
int wait = 0;
|
while (num <= 10) {
|
int min = 5000;
|
wait += (min * num);
|
Thread.sleep(wait);
|
List<TGameRecord> list = gameRecordService.list(new QueryWrapper<TGameRecord>().eq("number", code).eq("payType", 2));
|
TGameRecord one = list.get(0);
|
if (one.getStatus() == 1) {
|
break;
|
}
|
AlipayTradeQueryResponse resultUtil = payMoneyUtil.queryALIOrder(code);
|
if (resultUtil.getCode().equals("10000") && one.getStatus() == 0) {
|
/**
|
* WAIT_BUYER_PAY(交易创建,等待买家付款)、
|
* TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、
|
* 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) {
|
break;
|
}
|
if ("TRADE_SUCCESS".equals(s)) {
|
for (TGameRecord coursePackagePayment : list) {
|
coursePackagePayment.setStatus(1);
|
coursePackagePayment.setMoney(config.getCash());
|
coursePackagePayment.setOrderNo(tradeNo);
|
|
CourseCounsum courseCounsum = new CourseCounsum();
|
// courseCounsum.setPaymentId(paymentId);
|
courseCounsum.setChangeType(3);
|
courseCounsum.setInsertTime(new Date());
|
courseCounsum.setReason("智慧球场;" + config.getCash());
|
courseCounsum.setAppUserId(uid);
|
courseRecordClient.save(courseCounsum);
|
|
}
|
gameRecordService.updateBatchById(list);
|
Integer integer = startGame(uid, gameId, spaceId, sutuId);
|
break;
|
}
|
if ("WAIT_BUYER_PAY".equals(s)) {
|
num++;
|
}
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}).start();
|
}
|
return alipay;
|
} else if (type == 3) {
|
tGameRecord.setMoney(config.getPlayCoin());
|
gameRecordService.updateById(tGameRecord);
|
AppUser appUser = appUserClient.queryAppUser(uid);
|
Integer playPaiCoins = appUser.getPlayPaiCoins();
|
BigDecimal playCoin = config.getPlayCoin();
|
int i = playCoin.intValue();
|
if (playPaiCoins < i) {
|
return ResultUtil.error("玩湃币不足");
|
}
|
int i1 = playPaiCoins - i;
|
appUser.setPlayPaiCoins(i1);
|
appUserClient.updateAppUser(appUser);
|
startGame(uid, gameId, spaceId, sutuId);
|
return ResultUtil.success();
|
|
} else if (type == 5) {
|
AppUser appUser = appUserClient.queryAppUser(uid);
|
Integer playPaiCoins = appUser.getIntegral();
|
BigDecimal playCoin = config.getIntegral();
|
int i = playCoin.intValue();
|
if (playPaiCoins < i) {
|
return ResultUtil.error("积分不足");
|
}
|
int i1 = playPaiCoins - i;
|
appUser.setIntegral(i1);
|
appUser.setPoints(playCoin.intValue());
|
appUserClient.updateAppUser(appUser);
|
startGame(uid, gameId, spaceId, sutuId);
|
return ResultUtil.success();
|
} else {
|
return ResultUtil.error("支付方式错误");
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
|
|
}
|
|
|
private static Integer startGame(Integer uid, Integer gameId, Integer spaceId, Integer sutuId) {
|
HashMap<String, String> map = new HashMap<>();
|
map.put("sign", "0DB011836143EEE2C2E072967C9F4E4B");
|
map.put("app_user_id", uid + "");
|
map.put("game_id", gameId + "");
|
map.put("space_id", spaceId + "");
|
map.put("sutu_id", sutuId + "");
|
|
String s = HttpRequestUtil.postRequest("https://try.daowepark.com/v7/user_api/general/gameStart", map);
|
JSONObject jsonObject = JSONObject.parseObject(s);
|
Object code = jsonObject.get("code");
|
if (String.valueOf(code) != null && "200".equals(String.valueOf(code))) {
|
return 200;
|
} else {
|
return 500;
|
}
|
}
|
|
|
}
|