Переглянути джерело

赛事pc查询列表, 以及退票操作

Memory_LG 3 тижнів тому
батько
коміт
71586c380f

+ 6 - 2
qmjszx-admin/src/main/java/beilv/web/controller/carinformation/cardAppController.java

@@ -8,6 +8,7 @@ import beilv.carinformation.domain.CarInformation;
 import beilv.carinformation.service.ICarInformationService;
 import beilv.common.core.controller.BaseController;
 import beilv.common.core.domain.AjaxResult;
+import beilv.common.core.page.TableDataInfo;
 import beilv.common.utils.DateUtils;
 import beilv.common.utils.StringUtils;
 import beilv.common.utils.uuid.IdUtils;
@@ -265,7 +266,9 @@ public class cardAppController extends BaseController {
     @PostMapping("/selectYueQiuList")
     @ResponseBody
     public AjaxResult selectYueChangList(@RequestBody VipCardLog vipCardLog) {
-        return AjaxResult.success(vipCardLogService.selectYueQiuList(vipCardLog));
+        startPage();
+        TableDataInfo dataTable = getDataTable(vipCardLogService.selectYueQiuList(vipCardLog));
+        return AjaxResult.success(dataTable.getRows());
     }
 
 
@@ -277,7 +280,8 @@ public class cardAppController extends BaseController {
     @PostMapping("/selectCompetitionList")
     @ResponseBody
     public AjaxResult selectCanSaiList(@RequestBody VipCardLog vipCardLog) {
-        return AjaxResult.success(vipCardLogService.selectCanSaiList(vipCardLog));
+        startPage();
+        return AjaxResult.success(getDataTable(vipCardLogService.selectCanSaiList(vipCardLog)));
     }
 
 

+ 11 - 7
qmjszx-admin/src/main/java/beilv/web/controller/competition/CompetitionController.java

@@ -2,6 +2,7 @@ package beilv.web.controller.competition;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -11,6 +12,8 @@ import beilv.site.domain.BeilvSite;
 import beilv.site.service.IBeilvSiteService;
 import beilv.stadium.domain.Stadium;
 import beilv.stadium.service.IStadiumService;
+import beilv.vipCardLog.domain.VipCardLog;
+import beilv.vipCardLog.service.IVipCardLogService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -40,8 +43,10 @@ public class CompetitionController extends BaseController {
     @Autowired
     private IBeilvSiteService siteService;
 
+//    @Autowired
+//    private IStadiumService stadiumService;
     @Autowired
-    private IStadiumService stadiumService;
+    private IVipCardLogService vipCardLogService;
 
     @RequiresPermissions("system:competition:view")
     @GetMapping()
@@ -151,7 +156,6 @@ public class CompetitionController extends BaseController {
     @ResponseBody
     public AjaxResult close(String id){
         int i = competitionService.closeCompetitionById(id);
-        System.out.println("i = " + i);
         return toAjax(i);
     }
 
@@ -167,18 +171,18 @@ public class CompetitionController extends BaseController {
      */
     @PostMapping("/getTakePartList")
     @ResponseBody
-    public TableDataInfo getTakePartList(Stadium stadium) {
+    public TableDataInfo getTakePartList(VipCardLog vipCardLog) {
         startPage();
         //通过id获取参赛集合
-        List<Stadium> stadiumList = stadiumService.getTakePartList(stadium);
-        return getDataTable(stadiumList);
+        List<Map<String, Object>> maps = vipCardLogService.selectCanSaiList(vipCardLog);
+        return getDataTable(maps);
     }
 
 
     @RequiresPermissions("system:competition:view")
     @GetMapping("/openDetails/{id}")
     public String openDetails(@PathVariable("id") Integer id, ModelMap mmap) {
-        mmap.put("competitionId", id);
+        mmap.put("busId", id);
         return prefix + "/details";
     }
 
@@ -191,7 +195,7 @@ public class CompetitionController extends BaseController {
     @GetMapping("/close/{orderId}")
     @ResponseBody
     public AjaxResult closeStadiumById(@PathVariable("orderId") String orderId) {
-        return toAjax(stadiumService.closeStadiumById(orderId));
+        return vipCardLogService.refundById(new VipCardLog(orderId));
     }
 
 }

+ 80 - 39
qmjszx-admin/src/main/resources/templates/competition/details.html

@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<html lang="zh" xmlns:th="http://www.thymeleaf.org">
 <head>
     <th:block th:include="include :: header('赛事发布列表')"/>
 </head>
@@ -11,13 +11,13 @@
                 <div class="select-list">
                     <ul>
                         <li>
-                            <input type="hidden" name="competitionId" id="competitionId" th:value="${competitionId}"/>
+                            <input type="hidden" name="busId" id="busId" th:value="${busId}"/>
                         </li>
                         <li>
                             <label>门票类型:</label>
-                            <select name="orderType">
-                                <option value="1" selected>报名门票</option>
-                                <option value="2">观看门票</option>
+                            <select name="orderType" id="orderType">
+                                <option value="cansai" selected>报名门票</option>
+                                <option value="menpiao">观看门票</option>
                             </select>
                         </li>
                         <li>
@@ -50,90 +50,131 @@
     var prefix = ctx + "competition";
 
     $(function () {
+        // 初始化表格
         var options = {
-            url: prefix + "/getTakePartList",//http://localhost/app-api/stadium/getTakePartList
-            columns: [{
-                field: 'contactPeople',
+            url: prefix + "/getTakePartList",
+            columns: getColumns()
+        };
+        $.table.init(options);
+
+        // 监听下拉菜单的变化
+        $('#orderType').change(function () {
+            var selectedValue = $(this).val();
+            // 根据选择的值重新加载表格
+            $('#bootstrap-table').bootstrapTable('refresh', {
+                columns: getColumns(selectedValue)
+            });
+        });
+    });
+
+    function getColumns(orderType) {
+        orderType = orderType || $('#orderType').val(); // 默认值为当前选中的值
+
+        var commonColumns = [
+            {
+                field: 'competitionName',
                 title: '联系人'
-            }, {
-                field: 'contactNumber',
+            },
+            {
+                field: 'competitionMobile',
                 title: '联系电话'
-            }, {
+            },
+            {
                 field: 'registrationTime',
                 title: '下单时间'
-            }, {
+            },
+            {
                 field: 'cancellationTime',
                 title: '取消时间'
-            }, {
+            },
+            {
                 field: 'paymentTime',
                 title: '支付时间'
-            }, {
+            },
+            {
                 field: 'refundTime',
-                title: '退款时间',
-            }, {
+                title: '退款时间'
+            },
+            {
                 field: 'paymentStatus',
                 title: '支付状态',
                 formatter: function (value, row, index) {
                     return $.table.selectDictLabel(paymentStatus, value);
                 }
-            }, {
+            },
+            {
                 title: '操作',
                 align: 'center',
                 formatter: function (value, row, index) {
                     var actions = [];
-                    // if (row.competitionState === 'competiton_state_1')
-                    if(row.paymentStatus === 'payment_status_have_paid'){
+                    if (row.paymentStatus === 'payment_status_have_paid') {
                         actions.push('<a class="btn btn-success btn-xs" href="javascript:void(0)" onclick="closeStadium(\'' + row.orderId + '\')"><i class="fa fa-close"></i>退款</a> ')
                     }
-
                     return actions.join('');
                 }
-            }]
-        };
-        $.table.init(options);
-    });
+            }
+        ];
+
+       /* if (orderType === 'cansai') {
+            // 报名门票
+            return [
 
-    function closeStadium(id){
+            ].concat(commonColumns);
+        } else if (orderType === 'menpiao') {
+            // 观看门票
+            return [
+                {
+                    field: 'username',
+                    title: '联系人'
+                }
+            ].concat(commonColumns);
+        } else {
+
+        }*/
+
+        return commonColumns;
+    }
+
+    function closeStadium(id) {
         $.ajax({
-            url: prefix + "/close/"+id,
+            url: prefix + "/close/" + id,
             type: "GET",
-            success: function(res){
-                if(res.code === 0){
+            success: function (res) {
+                if (res.code === 0) {
                     $.modal.msgSuccess("操作成功");
                     $.table.refresh();
-                }else{
+                } else {
                     $.modal.msgSuccess("未知异常! 请联系管理员处理! ")
                 }
             },
-            error: function(err){
+            error: function (err) {
                 $.modal.msgSuccess("系统发生了错误, 请及时联系管理员进行处理! ")
             }
         })
     }
 
-    function closeCompetition(){
-        var competitionId = $("#competitionId").val();
+    function closeCompetition() {
+        var busId = $("#busId").val();
         $.ajax({
             url: ctx + "competition/close",
             type: "GET",
-            data: {id: competitionId},
-            success: function(res){
+            data: {id: busId},
+            success: function (res) {
                 console.log(res)
-                if(res.code === 0){
+                if (res.code === 0) {
                     var parent = activeWindow();
                     $.modal.close();
                     parent.$.modal.msgSuccess(res.msg);
                     parent.$.table.refresh();
-                }else{
+                } else {
                     $.modal.alertWarning("还存在未退款的订单! 不可以关闭赛事! ");
                 }
             },
-            error: function(err){
+            error: function (err) {
                 $.modal.msgSuccess("系统发生了错误, 请及时联系管理员进行处理! ")
             }
         })
     }
-
 </script>
 </body>
-</html>
+</html>

+ 6 - 2
qmjszx-business/src/main/java/beilv/competition/domain/Constant.java

@@ -2,8 +2,12 @@ package beilv.competition.domain;
 
 public class Constant {
     public static final String REDIS_CHANNEL = "message_sending";
-    public static final String TASK_QUEUE = "competition:";
-    public static final String TASK_QUEUE_QUERY = "competition:*";
+    public static final String TASK_QUEUE_APPLY = "competition_apply:";
+    public static final String TASK_QUEUE_START = "competition_start:";
+    public static final String TASK_QUEUE_END = "competition_end:";
+    public static final String TASK_QUEUE_QUERY_APPLY = "competition_apply:*";
+    public static final String TASK_QUEUE_QUERY_START = "competition_start:*";
+    public static final String TASK_QUEUE_QUERY_END = "competition_end:*";
 
     public Constant() {
     }

+ 10 - 7
qmjszx-business/src/main/java/beilv/competition/service/impl/CompetitionServiceImpl.java

@@ -18,7 +18,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Timer;
 
-import static beilv.competition.domain.Constant.TASK_QUEUE;
+import static beilv.competition.domain.Constant.*;
 
 /**
  * 赛事发布Service业务层处理
@@ -144,19 +144,22 @@ public class CompetitionServiceImpl implements ICompetitionService {
         competition.setPublishBy(ShiroUtils.getSysUser().getUserId().toString());
         competition.setPublishName(ShiroUtils.getSysUser().getUserName());
         competition.setCompetitionState(BAO_MING_ZHONG);
-//        Timer timer = new Timer();
-        //new Date(competition.getApplyStartTime().getTime() - (long) (competition.getApplyBeforeTime() * 60 * 1000))
-//        timer.schedule(new CloseReg(competitionMapper, competition.getId()), competition.getApplyStartTime());
         //修改使用redis的zset存储定时任务.
-        RedisTask redisTask = new RedisTask(competition.getId(),"competiton_state_3","payment_status_verification");
-        redisTemplate.opsForZSet().add(TASK_QUEUE + redisTask.getCompetitionId(), redisTask.toString(), competition.getAllowPublishTime());
+        RedisTask redisTaskApply = new RedisTask(competition.getId(),"competiton_state_3","payment_status_verification");
+        redisTemplate.opsForZSet().add(TASK_QUEUE_APPLY + competition.getId(), redisTaskApply.toString(), competition.getAllowPublishTime());
+
+        RedisTask redisTaskStart = new RedisTask(competition.getId(),"competiton_state_5","payment_status_verification");
+        redisTemplate.opsForZSet().add(TASK_QUEUE_START + competition.getId(), redisTaskStart.toString(), competition.getApplyStartTime().getTime());
+
+        RedisTask redisTaskEnd = new RedisTask(competition.getId(),"competiton_state_6","");
+        redisTemplate.opsForZSet().add(TASK_QUEUE_END + competition.getId(), redisTaskEnd.toString(), competition.getApplyEndTime().getTime());
 
         return competitionMapper.publishCompetition(competition);
     }
 
     @Override
     public int closeCompetitionById(String id) {
-        // 查询是否存在退款的订单
+        // 查询是否存在退款的订单
         if (competitionMapper.selectStadumIsOpenById(id)) {
             //修改赛事状态
             Competition competition = new Competition();

+ 96 - 8
qmjszx-business/src/main/java/beilv/competition/task/RedisTaskChecker.java

@@ -1,9 +1,12 @@
 package beilv.competition.task;
 
+import beilv.common.utils.DateUtils;
 import beilv.competition.domain.Competition;
 import beilv.competition.domain.RedisTask;
 import beilv.competition.mapper.CompetitionMapper;
 import beilv.stadium.domain.Stadium;
+import beilv.vipCardLog.domain.VipCardLog;
+import beilv.vipCardLog.mapper.VipCardLogMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -14,7 +17,7 @@ import javax.annotation.Resource;
 import java.util.Date;
 import java.util.Set;
 
-import static beilv.competition.domain.Constant.TASK_QUEUE_QUERY;
+import static beilv.competition.domain.Constant.*;
 
 /**
  * 轮询Redis有序集合, 处理到期的任务.
@@ -31,6 +34,9 @@ public class RedisTaskChecker {
     @Resource
     private CompetitionMapper competitionMapper;
 
+    @Resource
+    private VipCardLogMapper vipCardLogMapper;
+
     /**
      * 检测到期任务, 并将消息发布
      */
@@ -39,7 +45,7 @@ public class RedisTaskChecker {
         long currentTime = System.currentTimeMillis() / 1000;
 
         // 获取所有有序集合的键
-        Set<String> keys = stringRedisTemplate.keys(TASK_QUEUE_QUERY);
+        Set<String> keys = stringRedisTemplate.keys(TASK_QUEUE_QUERY_APPLY);
         if (keys != null && !keys.isEmpty()) {
             for (String key : keys) {
                 // 获取当前时间之前的所有任务
@@ -53,17 +59,99 @@ public class RedisTaskChecker {
                             ObjectMapper objectMapper = new ObjectMapper();
                             RedisTask task = objectMapper.readValue(taskJson, RedisTask.class);
 
+                            //赛事报名结束: 参赛订单核销, 赛事状态:报名结束
+
                             Competition competition = new Competition();
                             competition.setId(task.getCompetitionId());
                             competition.setCompetitionState(task.getCompetitionState());
                             competitionMapper.updateCompetition(competition);
 
-                            //核验当前赛事下已支付的订单
-                            Stadium stadium = new Stadium();
-                            stadium.setCompetitionId(String.valueOf(task.getCompetitionId()));
-                            stadium.setPaymentStatus(task.getPaymentStatus());
-                            stadium.setVerificationTime(new Date());
-                            competitionMapper.updateBookARace(stadium);
+
+                            //赛事id, 订单状态, 核验时间
+                            VipCardLog vipCardLog = new VipCardLog(String.valueOf(task.getCompetitionId()), "cansai", task.getPaymentStatus(), DateUtils.getNowDate());
+                            vipCardLogMapper.updateVipCardLogByBusId(vipCardLog);
+
+                            // 移除当前已发布的任务
+                            stringRedisTemplate.opsForZSet().remove(key, taskJson);
+                            System.out.println("Removed task: " + taskJson);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+    @Scheduled(fixedRate = 1000)
+    public void checkTasksStart() {
+        long currentTime = System.currentTimeMillis() / 1000;
+
+        // 获取所有有序集合的键
+        Set<String> keys = stringRedisTemplate.keys(TASK_QUEUE_QUERY_START);
+        if (keys != null && !keys.isEmpty()) {
+            for (String key : keys) {
+                // 获取当前时间之前的所有任务
+                Set<String> tasks = stringRedisTemplate.opsForZSet().rangeByScore(key, 0, currentTime);
+                if (tasks != null && !tasks.isEmpty()) {
+                    for (String taskJson : tasks) {
+                        try {
+//                            System.out.println("taskJson => " + taskJson);
+
+                            //获取任务信息
+                            ObjectMapper objectMapper = new ObjectMapper();
+                            RedisTask task = objectMapper.readValue(taskJson, RedisTask.class);
+
+                            //比赛开始, 门票订单核销, 赛事状态, 比赛开始
+
+                            Competition competition = new Competition();
+                            competition.setId(task.getCompetitionId());
+                            competition.setCompetitionState(task.getCompetitionState());
+                            competitionMapper.updateCompetition(competition);
+
+                            //赛事id, 订单状态, 核验时间
+                            VipCardLog vipCardLog = new VipCardLog(String.valueOf(task.getCompetitionId()), "menpiao", task.getPaymentStatus(), DateUtils.getNowDate());
+                            vipCardLogMapper.updateVipCardLogByBusId(vipCardLog);
+
+
+                            // 移除当前已发布的任务
+                            stringRedisTemplate.opsForZSet().remove(key, taskJson);
+                            System.out.println("Removed task: " + taskJson);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    @Scheduled(fixedRate = 1000)
+    public void checkTasksEnd() {
+        long currentTime = System.currentTimeMillis() / 1000;
+
+        // 获取所有有序集合的键
+        Set<String> keys = stringRedisTemplate.keys(TASK_QUEUE_QUERY_END);
+        if (keys != null && !keys.isEmpty()) {
+            for (String key : keys) {
+                // 获取当前时间之前的所有任务
+                Set<String> tasks = stringRedisTemplate.opsForZSet().rangeByScore(key, 0, currentTime);
+                if (tasks != null && !tasks.isEmpty()) {
+                    for (String taskJson : tasks) {
+                        try {
+//                            System.out.println("taskJson => " + taskJson);
+
+                            //获取任务信息
+                            ObjectMapper objectMapper = new ObjectMapper();
+                            RedisTask task = objectMapper.readValue(taskJson, RedisTask.class);
+
+                            //比赛开始, 门票订单核销, 赛事状态, 比赛开始
+
+                            Competition competition = new Competition();
+                            competition.setId(task.getCompetitionId());
+                            competition.setCompetitionState(task.getCompetitionState());
+                            competitionMapper.updateCompetition(competition);
 
 
                             // 移除当前已发布的任务

+ 10 - 0
qmjszx-business/src/main/java/beilv/vipCardLog/domain/VipCardLog.java

@@ -115,4 +115,14 @@ public class VipCardLog extends BaseEntity {
     private String competitionMobile;
     private BigDecimal refundPrice;
 
+    public VipCardLog(String busId, String orderType, String paymentStatus, Date verifyTime) {
+        this.busId = busId;
+        this.orderType = orderType;
+        this.paymentStatus = paymentStatus;
+        this.verifyTime = verifyTime;
+    }
+
+    public VipCardLog(String orderId) {
+        this.id = orderId;
+    }
 }

+ 2 - 0
qmjszx-business/src/main/java/beilv/vipCardLog/mapper/VipCardLogMapper.java

@@ -66,4 +66,6 @@ public interface VipCardLogMapper {
     List<Map<String, Object>> selectYueQiuList(VipCardLog vipCardLog);
 
     List<Map<String, Object>> selectCanSaiList(VipCardLog vipCardLog);
+
+    void updateVipCardLogByBusId(VipCardLog vipCardLog);
 }

+ 2 - 0
qmjszx-business/src/main/java/beilv/vipCardLog/service/IVipCardLogService.java

@@ -2,6 +2,7 @@ package beilv.vipCardLog.service;
 
 
 import beilv.common.core.domain.AjaxResult;
+import beilv.stadium.domain.Stadium;
 import beilv.vipCard.domain.VipCard;
 import beilv.vipCardLog.domain.VipCardLog;
 
@@ -72,4 +73,5 @@ public interface IVipCardLogService {
     List<Map<String, Object>> selectYueQiuList(VipCardLog vipCardLog);
 
     List<Map<String, Object>> selectCanSaiList(VipCardLog vipCardLog);
+
 }

+ 3 - 0
qmjszx-business/src/main/java/beilv/vipCardLog/service/impl/VipCardLogServiceImpl.java

@@ -6,6 +6,7 @@ import beilv.admissionticket.service.IAdmissionTicketService;
 import beilv.carinformation.domain.CarInformation;
 import beilv.carinformation.service.ICarInformationService;
 import beilv.common.core.domain.AjaxResult;
+import beilv.common.core.page.TableDataInfo;
 import beilv.common.core.text.Convert;
 import beilv.common.utils.DateUtils;
 import beilv.common.utils.StringUtils;
@@ -27,6 +28,8 @@ import java.math.RoundingMode;
 import java.util.List;
 import java.util.Map;
 
+import static beilv.common.utils.PageUtils.startPage;
+
 /**
  * 充值记录Service业务层处理
  *

+ 3 - 2
qmjszx-business/src/main/resources/mapper/competition/CompetitionMapper.xml

@@ -182,10 +182,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 ELSE true
                 END AS result
         FROM
-            beilv_book_a_race
+            beilv_vip_card_log
         WHERE
             payment_status = 'payment_status_have_paid'
-          AND competition_id = #{id}
+          and (order_type = 'cansai' or order_type = 'menpiao')
+          AND bus_id = #{id}
     </select>
 
     <update id="updateBookARace" parameterType="Stadium">

+ 17 - 2
qmjszx-business/src/main/resources/mapper/vipCardLog/VipCardLogMapper.xml

@@ -205,15 +205,30 @@
         b.registration_notes registrationNotes,
         b.competition_state competitionState,
         b.publish_time publishTime,
-        b.competition_img competitionImg
+        b.competition_img competitionImg,
+        COALESCE(a.competition_name, c.username) AS competitionName,
+        COALESCE(a.competition_mobile, c.mobile) AS competitionMobile
         from beilv_vip_card_log a
         left join beilv_competition b on a.bus_id = b.id
+        left join sys_member c on a.user_id = c.id
         <where>
             and (payment_status = 'payment_status_have_paid' or payment_status = 'payment_status_verification')
-            <if test="userId ! =null and userId ! =''">
+            <if test="userId != null and userId != ''">
                 and a.user_id = #{userId}
             </if>
+            <if test="busId != null and busId != ''">
+                and a.bus_id = #{busId}
+            </if>
+            <if test="orderType != null and orderType != ''">
+                and a.order_type = #{orderType}
+            </if>
         </where>
     </select>
 
+    <update id="updateVipCardLogByBusId" parameterType="VipCardLog">
+        update beilv_vip_card_log
+        set payment_status = #{paymentStatus} , verify_time = #{verifyTime}
+        where order_type = #{orderType} and bus_id = #{busId}
+    </update>
+
 </mapper>