Explorar o código

约场门票增加定时任务,每小时五十分执行, 将过时的票置为不可用

Memory_LG hai 5 meses
pai
achega
07af92ea2c

+ 2 - 0
qmjszx-business/src/main/java/beilv/admissionticket/mapper/AdmissionTicketMapper.java

@@ -54,4 +54,6 @@ public interface AdmissionTicketMapper {
      * @return 结果
      */
     public int deleteBeilvAdmissionTicketByIds(String[] ids);
+
+    void updateTicketStatus(List<String> ids);
 }

+ 2 - 0
qmjszx-business/src/main/java/beilv/admissionticket/service/IAdmissionTicketService.java

@@ -54,4 +54,6 @@ public interface IAdmissionTicketService {
      * @return 结果
      */
     public int deleteBeilvAdmissionTicketById(String id);
+
+    void updateTicketStatus(List<String> ids);
 }

+ 5 - 0
qmjszx-business/src/main/java/beilv/admissionticket/service/impl/AdmissionTicketServiceImpl.java

@@ -95,4 +95,9 @@ public class AdmissionTicketServiceImpl implements IAdmissionTicketService {
     {
         return beilvAdmissionTicketMapper.deleteBeilvAdmissionTicketById(id);
     }
+
+    @Override
+    public void updateTicketStatus(List<String> ids) {
+        beilvAdmissionTicketMapper.updateTicketStatus(ids);
+    }
 }

+ 32 - 19
qmjszx-business/src/main/resources/mapper/admissionticket/AdmissionTicketMapper.xml

@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="beilv.admissionticket.mapper.AdmissionTicketMapper">
-    
+
     <resultMap type="admissionTicket" id="AdmissionTicketResult">
-        <result property="id"    column="id"    />
+        <result property="id" column="id"/>
         <result property="venueId" column="venue_id"/>
         <result property="siteName" column="site_name"/>
         <result property="siteType" column="site_type"/>
@@ -20,22 +20,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         insert into beilv_admission_ticket
         (id, venue_id, site_name, site_type, session, price, ticket_date, admission_ticket_status)
         values
-        <foreach collection="list" item="ticket" separator="," >
+        <foreach collection="list" item="ticket" separator=",">
             (
-                #{ticket.id},
-                #{ticket.venueId},
-                #{ticket.siteName},
-                #{ticket.siteType},
-                #{ticket.session},
-                #{ticket.price},
-                #{ticket.ticketDate},
-                #{ticket.admissionTicketStatus}
+            #{ticket.id},
+            #{ticket.venueId},
+            #{ticket.siteName},
+            #{ticket.siteType},
+            #{ticket.session},
+            #{ticket.price},
+            #{ticket.ticketDate},
+            #{ticket.admissionTicketStatus}
             )
         </foreach>
     </insert>
 
     <sql id="selectBeilvAdmissionTicketVo">
-        select id, venue_id, site_name, site_type, session, price, ticket_date, admission_ticket_status from beilv_admission_ticket
+        select id, venue_id, site_name, site_type, session, price, ticket_date, admission_ticket_status
+        from beilv_admission_ticket
     </sql>
 
     <select id="selectBeilvAdmissionTicketList" parameterType="AdmissionTicket" resultMap="AdmissionTicketResult">
@@ -52,10 +53,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         from beilv_admission_ticket ts
         left join beilv_venue bv on ts.venue_id = bv.id
         <where>
-            <if test="siteName != null and siteName != ''"> and site_name = #{siteName}</if>
-            <if test="siteType != null and siteType != ''"> and site_type = #{siteType}</if>
-            <if test="ticketDate != null "> and ticket_date = #{ticketDate}</if>
-            <if test="admissionTicketStatus != null  and admissionTicketStatus != ''"> and admission_ticket_status = #{admissionTicketStatus}</if>
+            <if test="siteName != null and siteName != ''">and site_name = #{siteName}</if>
+            <if test="siteType != null and siteType != ''">and site_type = #{siteType}</if>
+            <if test="ticketDate != null ">and ticket_date = #{ticketDate}</if>
+            <if test="admissionTicketStatus != null  and admissionTicketStatus != ''">and admission_ticket_status =
+                #{admissionTicketStatus}
+            </if>
         </where>
         order by site_name
     </select>
@@ -115,7 +118,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </update>
 
     <delete id="deleteBeilvAdmissionTicketById" parameterType="String">
-        delete from beilv_admission_ticket where id = #{id}
+        delete
+        from beilv_admission_ticket
+        where id = #{id}
     </delete>
 
     <delete id="deleteBeilvAdmissionTicketByIds" parameterType="String">
@@ -125,4 +130,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </delete>
 
+    <update id="updateTicketStatus" parameterType="list">
+        update beilv_admission_ticket set admission_ticket_status = '1'
+        where id in
+        <foreach item="id" collection="list" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </update>
+
 </mapper>

+ 68 - 0
qmjszx-quartz/src/main/java/beilv/quartz/task/SiteTask.java

@@ -10,6 +10,8 @@ import beilv.site.service.IBeilvSiteService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
@@ -67,6 +69,53 @@ public class SiteTask {
         ticketService.insertAdmissionTicketToList(ticketList);
     }
 
+    public void updateTicketStatus(Long millisecond) {
+        AdmissionTicket admissionTicket = new AdmissionTicket();
+        admissionTicket.setAdmissionTicketStatus("0");
+
+        List<AdmissionTicket> admissionTickets = ticketService.selectBeilvAdmissionTicketList(admissionTicket);
+
+        List<String> ids = new ArrayList<>();
+
+        // 获取当前日期和时间
+        Date currentDate = new Date();
+
+        admissionTickets.forEach(ticket -> {
+            String session = ticket.getSession();//8:00-10:00
+            Date ticketDate = ticket.getTicketDate();//2024-01-07
+
+            try {
+                // 解析ticketDate
+                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+                // 解析session的开始时间
+                SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
+
+                // 将ticketDate和startTime合并为一个Date对象
+                Date ticketDateTime = combineDateAndTime(dateFormat.parse(dateFormat.format(ticketDate)), timeFormat.parse(session.split("-")[0]));
+
+//                long tenMinutesInMillis = 10 * 60 * 1000;
+                if (ticketDateTime != null) {
+                    Date ticketDateTimeMinusTenMinutes = new Date(ticketDateTime.getTime() - millisecond);
+                    // 判断条件
+                    if (ticketDateTimeMinusTenMinutes.before(currentDate)) {
+                        // 获取ticket的id并放入ids中
+                        ids.add(ticket.getId());
+                    }
+                }
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+        });
+
+        ids.forEach(id->{
+            System.out.println("id = " + id);
+        });
+        if(!ids.isEmpty()){
+            ticketService.updateTicketStatus(ids);
+        }
+    }
+
     // 将Date类型加上指定天数的方法
     private Date addDaysToDate(Date date, int days) {
         Calendar calendar = Calendar.getInstance();
@@ -75,4 +124,23 @@ public class SiteTask {
         return calendar.getTime();
     }
 
+    // 合并日期和时间的辅助方法
+    private static Date combineDateAndTime(Date date, Date time) {
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
+
+        try {
+            Date parsedDate = dateFormat.parse(dateFormat.format(date));
+            Date parsedTime = timeFormat.parse(timeFormat.format(time));
+
+            long dateMillis = parsedDate.getTime();
+            long timeMillis = parsedTime.getTime() - timeFormat.parse("00:00").getTime();
+
+            return new Date(dateMillis + timeMillis);
+        } catch (ParseException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
 }