package com.dsh.competition.controller;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.dsh.competition.entity.Competition;
|
import com.dsh.competition.entity.PaymentCompetition;
|
import com.dsh.competition.entity.UserCompetition;
|
import com.dsh.competition.feignclient.model.GetStuSourseList;
|
import com.dsh.competition.feignclient.model.ListQuery;
|
import com.dsh.competition.feignclient.model.PurchaseRecordVo;
|
import com.dsh.competition.model.CompetitionInfo;
|
import com.dsh.competition.model.CompetitionListVo;
|
import com.dsh.competition.model.PaymentCompetitionVo;
|
import com.dsh.competition.service.CompetitionService;
|
import com.dsh.competition.service.IPaymentCompetitionService;
|
import com.dsh.competition.service.UserCompetitionService;
|
import com.dsh.competition.util.PayMoneyUtil;
|
import com.dsh.competition.util.ResultUtil;
|
import com.dsh.competition.util.TokenUtil;
|
import com.dsh.competition.util.ToolUtil;
|
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.*;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.PrintWriter;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 前端控制器
|
* </p>
|
*
|
* @author jqs
|
* @since 2023-06-26
|
*/
|
@RestController
|
@RequestMapping("")
|
public class CompetitionController {
|
|
|
@Autowired
|
private CompetitionService cttService;
|
|
@Autowired
|
private UserCompetitionService ucttService;
|
|
private final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm");
|
|
@Autowired
|
private TokenUtil tokenUtil;
|
|
@Autowired
|
private PayMoneyUtil payMoneyUtil;
|
|
@Autowired
|
private IPaymentCompetitionService paymentCompetitionService;
|
|
|
@PostMapping("/base/competition/getPayedCompetitions")
|
public List<PaymentCompetition> getAllCompetitionPayRecord(@RequestBody Integer appUserId){
|
List<Integer> integers = new ArrayList<>();
|
integers.add(1);
|
integers.add(2);
|
return paymentCompetitionService.list(new QueryWrapper<PaymentCompetition>()
|
.in("payType",integers)
|
.eq("appUserId",appUserId)
|
.eq("payStatus",2));
|
}
|
|
|
@PostMapping("/base/competition/getCancelOrderOfUserPay")
|
public List<PaymentCompetition> getCancelOrderOfUserPayRecord(@RequestBody Integer appUserId){
|
List<Integer> integers = new ArrayList<>();
|
integers.add(1);
|
integers.add(2);
|
return paymentCompetitionService.list(new QueryWrapper<PaymentCompetition>()
|
.in("payType",integers)
|
.eq("appUserId",appUserId)
|
.eq("payStatus",3));
|
}
|
|
|
@PostMapping("/base/competition/getPlayPaiFGoldPayRecord")
|
public List<PaymentCompetition> getPlayPaiFGoldPayRecord(@RequestBody Integer appUserId){
|
return paymentCompetitionService.list(new QueryWrapper<PaymentCompetition>()
|
.eq("payType",3)
|
.eq("appUserId",appUserId)
|
.eq("payStatus",3));
|
}
|
|
|
|
@PostMapping("/base/competition/getCompetitionsDetails")
|
public List<PurchaseRecordVo> getStuSourseList(@RequestBody GetStuSourseList sourseList){
|
|
List<PurchaseRecordVo> recordVos = new ArrayList<>();
|
|
List<Competition> list = cttService.list(new QueryWrapper<Competition>()
|
.eq("payType",3 )
|
.eq("auditStatus",2));
|
List<Integer> comIds = list.stream().map(Competition::getId).collect(Collectors.toList());
|
List<UserCompetition> userCompetitions = ucttService.list(new QueryWrapper<UserCompetition>()
|
.between("insertTime", sourseList.getStartTime(),sourseList.getEndTime() )
|
.eq("userId", sourseList.getAppUserId())
|
.in("competitionId",comIds ));
|
if (userCompetitions.size() > 0){
|
userCompetitions.forEach(coms ->{
|
PurchaseRecordVo recordVo = new PurchaseRecordVo();
|
recordVo.setPurchaseType("报名赛事");
|
recordVo.setPurchaseTime(dateFormat.format(coms.getInsertTime()));
|
PaymentCompetition paymentCompetition = paymentCompetitionService.getById(coms.getPaymentCompetitionId());
|
recordVo.setPurchaseAmount("-"+paymentCompetition.getAmount());
|
recordVos.add(recordVo);
|
});
|
}
|
return recordVos;
|
}
|
|
|
|
|
|
@ResponseBody
|
@PostMapping("/base/competition/queryCompetitionList")
|
@ApiOperation(value = "获取赛事列表", tags = {"APP-赛事活动列表"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "城市code", name = "cityCode", dataType = "string", required = false),
|
@ApiImplicitParam(value = "搜索内容", name = "content", dataType = "string", required = false),
|
@ApiImplicitParam(value = "报名条件(1=全部用户,2=仅限年度会员参与,3=仅限学员参与)", name = "registerCondition", dataType = "int", required = false),
|
@ApiImplicitParam(value = "排序(asc=正序,desc=倒序)", name = "heat", dataType = "String", required = false),
|
@ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil<List<CompetitionListVo>> queryCompetitionList(String cityCode, String content, Integer registerCondition, String heat){
|
try {
|
List<CompetitionListVo> competitionListVos = cttService.queryCompetitionList(cityCode, content, registerCondition, heat);
|
return ResultUtil.success(competitionListVos);
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
|
@ResponseBody
|
@PostMapping("/base/competition/queryCompetitionInfo")
|
@ApiOperation(value = "获取赛事详情", tags = {"APP-赛事活动列表"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "赛事id", name = "id", dataType = "int", required = true),
|
@ApiImplicitParam(value = "经度", name = "lon", dataType = "string", required = false),
|
@ApiImplicitParam(value = "纬度", name = "lat", dataType = "string", required = false),
|
@ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil<CompetitionInfo> queryCompetitionInfo(Integer id, String lon, String lat){
|
try {
|
Integer uid = tokenUtil.getUserIdFormRedis();
|
if(null == uid){
|
return ResultUtil.tokenErr();
|
}
|
CompetitionInfo competitionInfo = cttService.queryCompetitionInfo(uid, id, lon, lat);
|
return ResultUtil.success(competitionInfo);
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
|
@ResponseBody
|
@PostMapping("/api/competition/paymentCompetition")
|
@ApiOperation(value = "赛事报名", tags = {"APP-赛事活动列表"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil paymentCompetition(PaymentCompetitionVo paymentCompetitionVo){
|
try {
|
Integer uid = tokenUtil.getUserIdFormRedis();
|
if(null == uid){
|
return ResultUtil.tokenErr();
|
}
|
return cttService.paymentCompetition(uid, paymentCompetitionVo);
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
/**
|
* 报名赛事微信支付回调
|
* @param request
|
* @param response
|
*/
|
@ResponseBody
|
@PostMapping("/base/competition/weChatPaymentCompetitionCallback")
|
public void weChatPaymentCompetitionCallback(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");
|
|
PaymentCompetition paymentCompetition = paymentCompetitionService.getOne(new QueryWrapper<PaymentCompetition>().eq("code", code).eq("payType", 1));
|
if(paymentCompetition.getPayStatus() == 1){
|
paymentCompetition.setPayStatus(2);
|
paymentCompetition.setPayTime(new Date());
|
paymentCompetition.setPayOrderNo(transaction_id);
|
paymentCompetitionService.updateById(paymentCompetition);
|
|
Competition competition = cttService.getById(paymentCompetition.getCompetitionId());
|
competition.setApplicantsNumber(competition.getApplicantsNumber() + 1);
|
cttService.updateById(competition);
|
}
|
|
PrintWriter out = response.getWriter();
|
out.write(result);
|
out.flush();
|
out.close();
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
|
|
/**
|
* 报名赛事支付宝支付回调
|
* @param request
|
* @param response
|
*/
|
@ResponseBody
|
@PostMapping("/base/competition/aliPaymentCompetitionCallback")
|
public void aliPaymentCompetitionCallback(HttpServletRequest request, HttpServletResponse response){
|
try {
|
Map<String, String> map = payMoneyUtil.alipayCallback(request);
|
if(null != map){
|
String code = map.get("out_trade_no");
|
String trade_no = map.get("trade_no");
|
|
PaymentCompetition paymentCompetition = paymentCompetitionService.getOne(new QueryWrapper<PaymentCompetition>().eq("code", code).eq("payType", 2));
|
if(paymentCompetition.getPayStatus() == 1){
|
paymentCompetition.setPayStatus(2);
|
paymentCompetition.setPayTime(new Date());
|
paymentCompetition.setPayOrderNo(trade_no);
|
paymentCompetitionService.updateById(paymentCompetition);
|
|
Competition competition = cttService.getById(paymentCompetition.getCompetitionId());
|
competition.setApplicantsNumber(competition.getApplicantsNumber() + 1);
|
cttService.updateById(competition);
|
}
|
PrintWriter out = response.getWriter();
|
out.write("success");
|
out.flush();
|
out.close();
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
|
|
|
|
@ResponseBody
|
@PostMapping("/api/competition/queryMyCompetitionList")
|
@ApiOperation(value = "获取已报名赛事列表", tags = {"APP-赛事活动列表"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "类型(0=全部,1=未开始,2=进行中,3=已结束,4=已取消)", name = "type", dataType = "int", required = true),
|
@ApiImplicitParam(value = "页码,首页1", name = "pageSize", dataType = "int", required = true),
|
@ApiImplicitParam(value = "页条数", name = "pageNo", dataType = "int", required = true),
|
@ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil<List<CompetitionListVo>> queryMyCompetitionList(Integer type, Integer pageSize, Integer pageNo){
|
try {
|
Integer uid = tokenUtil.getUserIdFormRedis();
|
if(null == uid){
|
return ResultUtil.tokenErr();
|
}
|
List<CompetitionListVo> competitionListVos = paymentCompetitionService.queryMyCompetitionList(uid, type, pageSize, pageNo);
|
return ResultUtil.success(competitionListVos);
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
|
@ResponseBody
|
@PostMapping("/api/competition/queryMyCompetitionInfo")
|
@ApiOperation(value = "获取已报名赛事详情", tags = {"APP-赛事活动列表"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "赛事id", name = "id", dataType = "int", required = true),
|
@ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil<CompetitionInfo> queryMyCompetitionInfo(Long id){
|
try {
|
CompetitionInfo competitionInfo = paymentCompetitionService.queryMyCompetitionInfo(id);
|
return ResultUtil.success(competitionInfo);
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
|
@ResponseBody
|
@PostMapping("/api/competition/cancelMyCompetition")
|
@ApiOperation(value = "取消报名的赛事", tags = {"APP-赛事活动列表"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "赛事id", name = "id", dataType = "int", required = true),
|
@ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil cancelMyCompetition(Long id){
|
try {
|
ResultUtil resultUtil = paymentCompetitionService.cancelMyCompetition(id);
|
return resultUtil;
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
/**
|
* 取消已报名赛事后微信回退金额回调
|
* @param request
|
* @param response
|
*/
|
@ResponseBody
|
@PostMapping("/base/competition/weChatCancelPaymentCompetitionCallback")
|
public void weChatCancelPaymentCompetitionCallback(HttpServletRequest request, HttpServletResponse response){
|
try {
|
Map<String, String> map = payMoneyUtil.wxRefundCallback(request);
|
if(null != map){
|
String code = map.get("out_refund_no");
|
String refund_id = map.get("refund_id");
|
String result = map.get("result");
|
PaymentCompetition paymentCompetition = paymentCompetitionService.getOne(new QueryWrapper<PaymentCompetition>().eq("code", code).eq("payType", 1));
|
if(paymentCompetition.getPayStatus() == 1){
|
paymentCompetition.setPayStatus(3);
|
paymentCompetition.setRefundTime(new Date());
|
paymentCompetition.setRefundOrderNo(refund_id);
|
paymentCompetitionService.updateById(paymentCompetition);
|
|
Competition competition = cttService.getById(paymentCompetition.getCompetitionId());
|
competition.setApplicantsNumber(competition.getApplicantsNumber() - 1);
|
cttService.updateById(competition);
|
}
|
PrintWriter out = response.getWriter();
|
out.write(result);
|
out.flush();
|
out.close();
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
|
|
@PostMapping("/base/competition/queryById")
|
public Competition queryById(Integer id){
|
try {
|
return cttService.getById(id);
|
}catch (Exception e){
|
e.printStackTrace();
|
return null;
|
}
|
}
|
|
|
@PostMapping("/base/competition/list")
|
public Page<Competition> list(@RequestBody ListQuery listQuery){
|
try {
|
Page<Competition> competitionPage = new Page<>(listQuery.getOffset(),listQuery.getLimit());
|
LambdaQueryWrapper<Competition> wrapper = new LambdaQueryWrapper<>();
|
if(ToolUtil.isNotEmpty(listQuery.getProvinceCode())){
|
wrapper.eq(Competition::getProvinceCode,listQuery.getProvinceCode());
|
}
|
if(ToolUtil.isNotEmpty(listQuery.getCityCode())){
|
wrapper.eq(Competition::getProvinceCode,listQuery.getCityCode());
|
}
|
if(ToolUtil.isNotEmpty(listQuery.getEventName())){
|
wrapper.like(Competition::getName,listQuery.getEventName());
|
}
|
if(ToolUtil.isNotEmpty(listQuery.getTime())){
|
wrapper.gt(Competition::getStartTime,listQuery.getTime().split(" - ")[0]+" 00:00:00");
|
wrapper.lt(Competition::getEndTime,listQuery.getTime().split(" - ")[1]+" 23:59:59");
|
}
|
if(ToolUtil.isNotEmpty(listQuery.getState())){
|
wrapper.eq(Competition::getState,listQuery.getState());
|
}
|
if(ToolUtil.isNotEmpty(listQuery.getRegisterCondition())){
|
wrapper.eq(Competition::getRegisterCondition,listQuery.getRegisterCondition());
|
}
|
wrapper.in(Competition::getStoreId,listQuery.getIds());
|
Page<Competition> page = cttService.page(competitionPage, wrapper);
|
return page;
|
}catch (Exception e){
|
e.printStackTrace();
|
return new Page<Competition>();
|
}
|
}
|
}
|