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.TGame;
|
import com.dsh.other.entity.TGameConfig;
|
import com.dsh.other.entity.TGameRecord;
|
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.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 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;
|
|
|
|
@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();
|
}
|
}
|
|
|
@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 {
|
List<TGameConfig> tGameConfigs = new ArrayList<>();
|
|
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){
|
ResultUtil alipay = payMoneyUtil.alipay("游戏支付", "游戏支付", "", code, config.getCash().toString(), "/base/course/aliPaymentCourseCallback");
|
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("code", code).eq("payType", 3));
|
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);
|
}
|
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);
|
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;
|
}
|
}
|
|
|
}
|