package com.dsh.competition.controller; import cn.hutool.core.date.DateUtil; import cn.hutool.poi.excel.ExcelUtil; 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.Participant; import com.dsh.competition.entity.PaymentCompetition; import com.dsh.competition.entity.UserCompetition; import com.dsh.competition.feignclient.account.AppUserClient; import com.dsh.competition.feignclient.account.StudentClient; import com.dsh.competition.feignclient.account.StudentHonorClient; import com.dsh.competition.feignclient.account.model.AppUser; import com.dsh.competition.feignclient.account.model.StudentHonor; import com.dsh.competition.feignclient.account.model.TStudent; import com.dsh.competition.feignclient.course.CoursePackagePaymentClient; import com.dsh.competition.feignclient.course.model.PaymentDeductionClassHour; import com.dsh.competition.feignclient.model.*; import com.dsh.competition.feignclient.other.StoreClient; import com.dsh.competition.model.*; import com.dsh.competition.service.CompetitionService; import com.dsh.competition.service.IParticipantService; 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 lombok.Synchronized; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.io.PrintWriter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.CompletionService; import java.util.stream.Collectors; /** *

* 前端控制器 *

* * @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; @Autowired private IParticipantService participantService; @Autowired private AppUserClient appUserClient; @Resource private StudentHonorClient studentHonorClient; /** * 根据门店ids 获取对应的赛事 根据赛事支付记录获取用户ids */ @ResponseBody @PostMapping("/base/competition/getUserIds") public List getUserIds(@RequestBody ListQuery query) { List list = cttService.list(new QueryWrapper()); // 赛事id集合 List comIds = new ArrayList<>(); for (Integer id : query.getIds()) { for (Competition competition : list) { if (competition.getStoreId().contains(id.toString())) { comIds.add(competition.getId()); } } } // 获取到赛事id集合 去重 List collect = comIds.stream().distinct().collect(Collectors.toList()); // 根据赛事id 查询赛事支付记录 获取用户ids if (collect.size() == 0) { return new ArrayList<>(); } else { List userIds = paymentCompetitionService.list(new QueryWrapper() .in("competitionId", collect)).stream() .map(PaymentCompetition::getAppUserId).collect(Collectors.toList()); return userIds; } } /** * 获取赛事报名记录 */ @ResponseBody @RequestMapping("/base/competition/listAllPayment") public List listAllPayment(@RequestBody CompetitionQuery query) { Integer operatorId1 = query.getOperatorId(); if (operatorId1 != null) { // 赛事集合id List operatorId = cttService.list(new QueryWrapper() .eq("operatorId", operatorId1)).stream().map(Competition::getId).collect(Collectors.toList()); query.setUserIds(operatorId); } List paymentCompetitions = paymentCompetitionService.listAll(query); List result = new ArrayList<>(); if (query.getOperatorId() != null) { for (PaymentCompetition paymentCompetition : paymentCompetitions) { Integer competitionId = paymentCompetition.getCompetitionId(); Competition byId = cttService.getById(competitionId); if (byId != null) { Integer operatorId = byId.getOperatorId(); if (operatorId != null) { if (operatorId == query.getOperatorId()) { result.add(paymentCompetition); } } } } return result; } else if (query.getStoreId() != null) { for (PaymentCompetition paymentCompetition : paymentCompetitions) { Integer competitionId = paymentCompetition.getCompetitionId(); Competition byId = cttService.getById(competitionId); if (byId != null) { String storeId = byId.getStoreId(); if (storeId.contains(query.getStoreId().toString())) { result.add(paymentCompetition); } } } return result; } return paymentCompetitions; } @ResponseBody @PostMapping("/base/competition/getPayedCompetitions") public BillingRequestVo getAllCompetitionPayRecord(@RequestBody BillingDataRequestVo requestVo) { BillingRequestVo billingRequestVo = new BillingRequestVo(); List integers = new ArrayList<>(); integers = paymentCompetitionService.queryDatas(requestVo.getAppUserId(), requestVo.getMonthStart(), requestVo.getMonthEnd()); System.out.println(integers); if (integers.size() > 0) { billingRequestVo.setRequests(integers); } return billingRequestVo; } @ResponseBody @PostMapping("/base/competition/getCancelOrderOfUserPay") public BillingRequestVo getCancelOrderOfUserPayRecord(@RequestBody BillingDataRequestVo requestVo) { BillingRequestVo billingRequestVo = new BillingRequestVo(); List integers = new ArrayList<>(); integers = paymentCompetitionService.queryCancelDatas(requestVo.getAppUserId(), requestVo.getMonthStart(), requestVo.getMonthEnd()); System.out.println(integers); if (integers.size() > 0) { billingRequestVo.setRequests(integers); } return billingRequestVo; } @PostMapping("/base/competition/getPlayPaiFGoldPayRecord") public List getPlayPaiFGoldPayRecord(@RequestBody Integer appUserId) { ArrayList integers = new ArrayList<>(); // integers.add(1); // integers.add(2); integers.add(3); ArrayList pays = new ArrayList<>(); pays.add(2); pays.add(3); return paymentCompetitionService.list(new QueryWrapper() .in("payType", integers) .eq("appUserId", appUserId) .in("payStatus", pays)); } @PostMapping("/base/competition/queryByCode") public Integer queryByCode(@RequestBody String code) { return paymentCompetitionService.queryByCode(code); } @PostMapping("/base/competition/getCompetitionsDetails") public List getStuSourseList(@RequestBody GetStuSourseList sourseList) { List recordVos = new ArrayList<>(); ArrayList integers = new ArrayList<>(); integers.add(1); integers.add(2); List list = paymentCompetitionService.list(new QueryWrapper() .in("payType", integers) .eq("appUserId", sourseList.getAppUserId()) .eq("state", 1)); if (list.size() > 0) { List comIds = list.stream().map(PaymentCompetition::getId).collect(Collectors.toList()); List userCompetitions = ucttService.list(new QueryWrapper() .between("insertTime", sourseList.getStartTime(), sourseList.getEndTime()) .eq("appUserId", sourseList.getAppUserId()) .in("paymentCompetitionId", 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; } @PostMapping("/base/competition/getCompetitionsDetails1") public List getStuSourseList1(@RequestBody GetStuSourseList sourseList) { List recordVos = new ArrayList<>(); ArrayList integers = new ArrayList<>(); integers.add(4); List list = paymentCompetitionService.list(new QueryWrapper() .in("payType", integers) .eq("appUserId", sourseList.getAppUserId()) .eq("state", 1)); if (list.size() > 0) { List comIds = list.stream().map(PaymentCompetition::getId).collect(Collectors.toList()); List userCompetitions = ucttService.list(new QueryWrapper() .between("insertTime", sourseList.getStartTime(), sourseList.getEndTime()) .eq("appUserId", sourseList.getAppUserId()) .in("paymentCompetitionId", 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> queryCompetitionList(String cityCode, String content, Integer registerCondition, String heat) { try { List competitionListVos = cttService.queryCompetitionList(cityCode, content, registerCondition, heat); List filteredList = competitionListVos.stream() .filter(vo -> vo.getStatus() == 1 || vo.getStatus() == 2) .collect(Collectors.toList()); return ResultUtil.success(filteredList); } 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 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); String dateString = competitionInfo.getRegisterEndTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date date = sdf.parse(dateString); if (new Date().after(date)) { competitionInfo.setHasPass(1); } else { competitionInfo.setHasPass(0); } return ResultUtil.success(competitionInfo); } catch (Exception e) { e.printStackTrace(); return ResultUtil.runErr(); } } @Autowired private CompetitionService competitionService; @Resource private CoursePackagePaymentClient coursePackagePaymentClient; @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 synchronized ResultUtil paymentCompetition(PaymentCompetitionVo paymentCompetitionVo) { try { Competition byId = competitionService.getById(paymentCompetitionVo.getId()); Date date = byId.getEndTime(); boolean isPast = date.after(new Date()); if (!isPast) { return new ResultUtil(0, "已超过截至报名时间"); } Integer uid = tokenUtil.getUserIdFormRedis(); if (null == uid) { return ResultUtil.tokenErr(); } if (byId.getRegisterCondition() == 3) { Integer counts = coursePackagePaymentClient.isHave(paymentCompetitionVo.getIds()); if (counts == 0) { return new ResultUtil(0, "当前赛事仅限已购课学员报名"); } } if (byId.getRegisterCondition() == 2) { AppUser appUser = appUserClient.queryAppUser(uid); if (appUser.getIsVip() == 0) { return new ResultUtil(0, "当前赛事仅限年度会员报名"); } else { Date vipEndTime = appUser.getVipEndTime(); Date currentTime = new Date(); // Current time if (vipEndTime.before(currentTime)) { return new ResultUtil(0, "您的年度会员已过期,请续费"); } } } return cttService.paymentCompetition(uid, paymentCompetitionVo); } catch (Exception e) { e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/competition/paymentCompetitionCourseList") @ApiOperation(value = "赛事报名--支付可用课时列表", tags = {"APP-赛事活动列表"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "赛事id", name = "id", dataType = "int", required = true), }) public ResultUtil paymentCompetitionCourseList(Integer id) { try { Integer uid = tokenUtil.getUserIdFormRedis(); if (null == uid) { return ResultUtil.tokenErr(); } return cttService.paymentCompetitionCourseList(uid, id); } 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 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().eq("code", code).eq("payType", 1)); if (paymentCompetition.getPayStatus() == 1) { paymentCompetition.setAppUserId(null); 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 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().eq("code", code).eq("payType", 2)); if (paymentCompetition.getPayStatus() == 1) { paymentCompetition.setAppUserId(null); 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 = "页条数", name = "pageSize", dataType = "int", required = true), @ApiImplicitParam(value = "页码,首页1", name = "pageNo", dataType = "int", required = true), @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil> queryMyCompetitionList(Integer type, Integer pageSize, Integer pageNo) { try { Integer uid = tokenUtil.getUserIdFormRedis(); if (null == uid) { return ResultUtil.tokenErr(); } List 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 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 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().eq("code", code).eq("payType", 1)); if (paymentCompetition.getPayStatus() == 1) { paymentCompetition.setPayStatus(3); paymentCompetition.setRefundTime(new Date()); paymentCompetition.setRefundOrderNo(refund_id); paymentCompetition.setAppUserId(null); 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(@RequestBody Integer id) { try { return cttService.getById(id); } catch (Exception e) { e.printStackTrace(); return null; } } @PostMapping("/base/competition/list") public Page list(@RequestBody ListQuery listQuery) { try { Page competitionPage = new Page<>(listQuery.getOffset(), listQuery.getLimit()); LambdaQueryWrapper 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.lt(Competition::getStartTime, listQuery.getTime().split(" - ")[0] + " 00:00:00"); wrapper.gt(Competition::getEndTime, listQuery.getTime().split(" - ")[1] + " 23:59:59"); } if(ToolUtil.isNotEmpty(listQuery.getRegisterCondition())){ wrapper.eq(Competition::getRegisterCondition,listQuery.getRegisterCondition()); } // 平台查询审核通过的赛事 if (listQuery.getObj()==1){ wrapper.eq(Competition::getAuditStatus,2); } // 赛事审核 if (listQuery.getObj()==-1){ wrapper.ne(Competition::getAuditStatus,2); } wrapper.in(Competition::getStoreId,listQuery.getIds()); wrapper.orderByDesc(Competition::getInsertTime); Page page = cttService.page(competitionPage, wrapper); for (Competition record : page.getRecords()) { // 查询当前赛事有多少人报名了 List competitionId = ucttService.list(new QueryWrapper() .eq("competitionId", record.getId())); // 报名数量 int temp = competitionId.size(); String value = String.valueOf(temp); record.setCount(record.getApplicantsNumber() + "-" + value); } return page; } catch (Exception e) { e.printStackTrace(); return new Page(); } } @PostMapping("/base/competition/listAudit") public Page listAudit(@RequestBody ListQuery listQuery) { try { Page competitionPage = new Page<>(listQuery.getOffset(), listQuery.getLimit()); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if (ToolUtil.isNotEmpty(listQuery.getProvinceCode())) { wrapper.eq(Competition::getProvinceCode, listQuery.getProvinceCode()); } if (ToolUtil.isNotEmpty(listQuery.getCityCode())) { wrapper.eq(Competition::getCityCode, listQuery.getCityCode()); } if (ToolUtil.isNotEmpty(listQuery.getEventName())) { wrapper.like(Competition::getName, listQuery.getEventName()); } if (ToolUtil.isNotEmpty(listQuery.getState())) { wrapper.eq(Competition::getAuditStatus, listQuery.getState()); } if (ToolUtil.isNotEmpty(listQuery.getRegisterCondition())) { wrapper.eq(Competition::getRegisterCondition, listQuery.getRegisterCondition()); } wrapper.in(Competition::getStoreId, listQuery.getIds()); ArrayList integers = new ArrayList<>(); integers.add(1); integers.add(3); wrapper.in(Competition::getAuditStatus, integers); wrapper.orderByDesc(Competition::getInsertTime); Page page = cttService.page(competitionPage, wrapper); return page; } catch (Exception e) { e.printStackTrace(); return new Page(); } } @PostMapping("/base/competition/add") public void add(@RequestBody Competition competition) { try { if (competition.getStartTime().after(new Date())) { competition.setStatus(1); } if (competition.getStartTime().before(new Date())) { if (competition.getEndTime().after(new Date())) { competition.setStatus(2); } else { competition.setStatus(3); } if(competition.getStatus() == 2){ //添加勋章数据 List list = paymentCompetitionService.list(new QueryWrapper() .eq("competitionId", competition.getId()).eq("payStatus", 2).eq("state", 1)); Set collect = list.stream().map(PaymentCompetition::getAppUserId).collect(Collectors.toSet()); for (Integer integer : collect) { int count = paymentCompetitionService.count(new QueryWrapper() .eq("appUserId", integer).eq("payStatus", 2).eq("state", 1)); StudentHonor studentHonor = new StudentHonor(); studentHonor.setAppUserId(integer); studentHonor.setHonorType(2); studentHonor.setNumber(count); studentHonorClient.saveStudentHonor(studentHonor); } } } competition.setInsertTime(new Date()); cttService.save(competition); } catch (Exception e) { e.printStackTrace(); } } @PostMapping("/base/competition/update") public void update(@RequestBody Competition competition) { try { if (competition.getStartTime().after(new Date())) { competition.setStatus(1); } if (competition.getStartTime().before(new Date())) { if (competition.getEndTime().after(new Date())) { competition.setStatus(2); } else { competition.setStatus(3); } if(competition.getStatus() == 2){ //添加勋章数据 List list = paymentCompetitionService.list(new QueryWrapper() .eq("competitionId", competition.getId()).eq("payStatus", 2).eq("state", 1)); Set collect = list.stream().map(PaymentCompetition::getAppUserId).collect(Collectors.toSet()); for (Integer integer : collect) { int count = paymentCompetitionService.count(new QueryWrapper() .eq("appUserId", integer).eq("payStatus", 2).eq("state", 1)); StudentHonor studentHonor = new StudentHonor(); studentHonor.setAppUserId(integer); studentHonor.setHonorType(2); studentHonor.setNumber(count); studentHonorClient.saveStudentHonor(studentHonor); } } } cttService.updateById(competition); } catch (Exception e) { e.printStackTrace(); } } @Resource private StoreClient storeClient; @Autowired private UserCompetitionService userCompetitionService; @PostMapping("/base/competition/cancel") public void cancel(@RequestBody Integer id) { try { Competition byId = cttService.getById(id); byId.setStatus(4); cttService.updateById(byId); List list = paymentCompetitionService.list(new QueryWrapper().eq("competitionId", byId.getId()).eq("payStatus", 2)); for (PaymentCompetition pay : list) { PaymentCompetition paymentCompetition = pay; String code = paymentCompetition.getCode(); Double amount = paymentCompetition.getAmount(); Competition competition = competitionService.getById(paymentCompetition.getCompetitionId()); String payOrderNo = paymentCompetition.getPayOrderNo(); if (paymentCompetition.getPayType() == 1) {//微信支付 Map map = payMoneyUtil.wxRefund(payOrderNo, code, amount.toString(), amount.toString(), "/base/competition/weChatCancelPaymentCompetitionCallback"); String return_code = map.get("return_code"); if (!"SUCCESS".equals(return_code)) { // return ResultUtil.error(map.get("return_msg")); continue; } String refund_id = map.get("refund_id"); paymentCompetition.setRefundOrderNo(refund_id); paymentCompetitionService.updateById(paymentCompetition); storeClient.addBackRecord(paymentCompetition.getAmount() + "_" + paymentCompetition.getAppUserId()); } if (paymentCompetition.getPayType() == 2) {//支付宝支付 Map map = payMoneyUtil.aliRefund(payOrderNo, amount.toString()); String return_code = map.get("code"); if (!"10000".equals(return_code)) { // return ResultUtil.error(map.get("msg")); continue; } String refund_id = map.get("trade_no"); paymentCompetition.setRefundOrderNo(refund_id); paymentCompetition.setRefundTime(new Date()); paymentCompetition.setPayStatus(3); paymentCompetition.setAppUserId(null); paymentCompetitionService.updateById(paymentCompetition); // competition.setApplicantsNumber(competition.getApplicantsNumber() - 1); competitionService.updateById(competition); } if (paymentCompetition.getPayType() == 3) {//玩湃币支付 AppUser appUser = appUserClient.queryAppUser(paymentCompetition.getAppUserId()); appUser.setPlayPaiCoins(appUser.getPlayPaiCoins() + amount.intValue()); appUserClient.updateAppUser(appUser); paymentCompetition.setRefundOrderNo(""); paymentCompetition.setRefundTime(new Date()); paymentCompetition.setPayStatus(3); paymentCompetition.setAppUserId(null); paymentCompetitionService.updateById(paymentCompetition); // competition.setApplicantsNumber(competition.getApplicantsNumber() - 1); competitionService.updateById(competition); } if (paymentCompetition.getPayType() == 4) {//课程支付 List list1 = userCompetitionService.list(new QueryWrapper().eq("paymentCompetitionId", paymentCompetition.getId())); for (UserCompetition userCompetition : list1) { // Participant participant = participantService.getById(userCompetition.getId()); // Student student = studentClient.queryStudentByPhone(participant.getPhone()); PaymentDeductionClassHour paymentDeductionClassHour = new PaymentDeductionClassHour(); paymentDeductionClassHour.setId(userCompetition.getParticipantId()); paymentDeductionClassHour.setClassHour(competition.getClassPrice()); paymentDeductionClassHour.setCode(code); coursePackagePaymentClient.rollbackPaymentDeductionClassHour(paymentDeductionClassHour); } paymentCompetition.setRefundOrderNo(""); paymentCompetition.setRefundTime(new Date()); paymentCompetition.setPayStatus(3); paymentCompetition.setAppUserId(null); paymentCompetitionService.updateById(paymentCompetition); // competition.setApplicantsNumber(competition.getApplicantsNumber() - 1); competitionService.updateById(competition); } } } catch (Exception e) { e.printStackTrace(); } } @PostMapping("/base/competition/getPeopleFromId") public Page getPeopleFromId(@RequestBody GetPeopleQuery getPeopleQuery) { try { Page participantPage = new Page<>(getPeopleQuery.getOffset(), getPeopleQuery.getLimit()); Page page = participantService.getPeopleFromId(participantPage, getPeopleQuery.getId(), getPeopleQuery.getState()); return page; } catch (Exception e) { e.printStackTrace(); return null; } } @Resource private StudentClient studentClient; @PostMapping("/base/competition/getPeopleFromId1") public Page getPeopleFromId1(@RequestBody GetPeopleQuery getPeopleQuery) { try { Page page = participantService.getPeopleFromId1(getPeopleQuery.getOffset(), getPeopleQuery.getLimit(), getPeopleQuery.getId(), getPeopleQuery.getState()); return page; } catch (Exception e) { e.printStackTrace(); return null; } } @PostMapping("/base/competition/getPeoples") @ResponseBody public List getPeoples(@RequestBody GetPeopleQuery getPeopleQuery) { List list = participantService.getPeoples( getPeopleQuery.getId(), getPeopleQuery.getState()); return list; } @PostMapping("/base/competition/queryFee") public Double queryFee(@RequestBody QueryDataFee queryDataFee) { HashMap map = new HashMap<>(); String data = queryDataFee.getData(); List ids = queryDataFee.getIds(); if (ids.size() == 0) { ids.add(-1); }else{ List list1 = competitionService.list(new QueryWrapper().in("storeId", ids).eq("auditStatus", 2).eq("state", 1).ne("status", 4)); ids = list1.stream().map(Competition::getId).collect(Collectors.toList()); if (ids.size() == 0) { ids.add(-1); } } LambdaQueryWrapper vipPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (ToolUtil.isNotEmpty(data)) { String stime = data.split(" - ")[0] + " 00:00:00"; String etime = data.split(" - ")[1] + " 23:59:59"; vipPaymentLambdaQueryWrapper.between(PaymentCompetition::getInsertTime, stime, etime); } vipPaymentLambdaQueryWrapper.in(PaymentCompetition::getCompetitionId, ids); vipPaymentLambdaQueryWrapper.eq(PaymentCompetition::getPayStatus, 2); ArrayList objects = new ArrayList<>(); objects.add(1); objects.add(2); vipPaymentLambdaQueryWrapper.in(PaymentCompetition::getPayType, objects); List list = paymentCompetitionService.list(vipPaymentLambdaQueryWrapper); double sum = list.stream().mapToDouble(PaymentCompetition::getAmount).sum(); return sum; } @ResponseBody @PostMapping("/base/competition/actPt") public HashMap actPt(@RequestBody List ids) { HashMap map = new HashMap<>(); if (ids.size() == 0) { ids.add(-1); } ArrayList integers = new ArrayList<>(); int year = DateUtil.year(new Date()); for (int i = 0; i < 10; i++) { integers.add(year - i); } List collect = integers.stream().sorted().collect(Collectors.toList()); // 年 ArrayList years = new ArrayList<>(); ArrayList yearsUser = new ArrayList<>(); for (Object o : collect) { String s = o.toString(); int count = cttService.count(new LambdaQueryWrapper().like(Competition::getInsertTime, s)); int count1 = ucttService.count(new LambdaQueryWrapper().in(UserCompetition::getAppUserId, ids).like(UserCompetition::getInsertTime, s)); years.add(count); yearsUser.add(count1); } map.put("yearData", years); map.put("yearsUser", yearsUser); // 月 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ArrayList months = new ArrayList<>(); ArrayList monthsUser = new ArrayList<>(); for (int i = 1; i <= 12; i++) { double sum = 0.0; String m = i + ""; if (i < 10) { m = "0" + i; } String s = year + "-" + m; int count = cttService.count(new LambdaQueryWrapper().like(Competition::getInsertTime, s)); int count1 = ucttService.count(new LambdaQueryWrapper().in(UserCompetition::getAppUserId, ids).like(UserCompetition::getInsertTime, s)); months.add(count); monthsUser.add(count1); } map.put("monthData", months); map.put("monthsUser", monthsUser); return map; } @ResponseBody @PostMapping("/base/competition/actYys") public HashMap actYys(@RequestBody CompetionVO vo) { HashMap map = new HashMap<>(); if (vo.getIds().size() == 0) { vo.getIds().add(-1); } ArrayList integers = new ArrayList<>(); int year = DateUtil.year(new Date()); for (int i = 0; i < 10; i++) { integers.add(year - i); } List collect = integers.stream().sorted().collect(Collectors.toList()); // 年 ArrayList years = new ArrayList<>(); ArrayList yearsUser = new ArrayList<>(); Integer operatorId = vo.getOperatorId(); List operatorId1 = cttService.list(new QueryWrapper().eq("operatorId", operatorId)) .stream().map(Competition::getId).collect(Collectors.toList()); for (Object o : collect) { String s = o.toString(); int count = cttService.count(new LambdaQueryWrapper().like(Competition::getInsertTime, s).eq(Competition::getOperatorId, vo.getOperatorId())); int count1 = ucttService.count(new LambdaQueryWrapper().in(UserCompetition::getAppUserId, vo.getIds()).like(UserCompetition::getInsertTime, s)); years.add(count); yearsUser.add(count1); } map.put("yearData", years); map.put("yearsUser", yearsUser); // 月 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ArrayList months = new ArrayList<>(); ArrayList monthsUser = new ArrayList<>(); for (int i = 1; i <= 12; i++) { double sum = 0.0; String m = i + ""; if (i < 10) { m = "0" + i; } String s = year + "-" + m; int count = cttService.count(new LambdaQueryWrapper().like(Competition::getInsertTime, s).eq(Competition::getOperatorId, operatorId)); int count1 = ucttService.count(new LambdaQueryWrapper().in(UserCompetition::getAppUserId, vo.getIds()).like(UserCompetition::getInsertTime, s)); months.add(count); monthsUser.add(count1); } map.put("monthData", months); map.put("monthsUser", monthsUser); return map; } @ResponseBody @PostMapping("/base/competition/queryAppUserId") public List queryAppUserId(@RequestBody List storeIds){ List list = competitionService.list(new QueryWrapper().in("storeId", storeIds).eq("auditStatus", 2).eq("state", 1)); List collect = list.stream().map(Competition::getId).collect(Collectors.toList()); if(collect.size() == 0){ return new ArrayList<>(); } List list1 = paymentCompetitionService.list(new QueryWrapper().eq("payStatus", 2).eq("state", 1).in("competitionId", collect)); return list1.stream().map(PaymentCompetition::getAppUserId).collect(Collectors.toList()); } }