Quartz

xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

    <!-- 定义任务bean -->
    <bean name="paymentOrderJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
        <!-- 指定具体的job类 -->
        <property name="jobClass" value="com.sugou.store.order.job.PaymentOrderJob" />
        <!-- 指定job的名称 -->
        <property name="name" value="paymentOrder" />
        <!-- 指定job的分组 -->
        <property name="group" value="Order" />
        <!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时会在调度器中删除该任务  -->
        <property name="durability" value="true"/>
        <!-- 指定spring容器的key,如果不设定在job中的jobmap中是获取不到spring容器的 -->
        <property name="applicationContextJobDataKey" value="applicationContext"/>
    </bean>
    
    <!-- 定义触发器 -->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="paymentOrderJobDetail" />
        <!-- 每一分钟执行一次 -->
        <property name="cronExpression" value="0 0/1 * * * ?" />
    </bean>
    
    <!-- 定义调度器 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger" />
            </list>
        </property>
    </bean>

</beans>





package com.sugou.store.order.job;

import org.joda.time.DateTime;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.quartz.QuartzJobBean;

import com.sugou.store.order.mapper.OrderMapper;

/**
 * 扫描超过2天未付款的订单关闭
 */
public class PaymentOrderJob extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        ApplicationContext applicationContext = (ApplicationContext) context.getJobDetail().getJobDataMap()
                .get("applicationContext");
        //时间参数,当前时间向前推2天
        applicationContext.getBean(OrderMapper.class).paymentOrderScan(new DateTime().minusDays(2).toDate());
    }

}

orderMapper.xml


<?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">
<mapper namespace="com.sugou.store.order.mapper.OrderMapper">

    <sql id="tableName">tb_order</sql>
    
    <resultMap type="Order" id="pojoResultMap" autoMapping="true">
        <id column="order_id" property="orderId"/>
        <association property="orderShipping" javaType="OrderShipping" column="order_id"
            select="queryOrderShippingByOrderId" autoMapping="true"></association>
        <collection property="orderItems" javaType="Arraylist" ofType="OrderItem" autoMapping="true"
            select="queryOrderItemByOrderId" column="order_id">
        </collection>
    </resultMap>
    
    <select id="queryOrderItemByOrderId" resultType="OrderItem" parameterType="String">
        SELECT * FROM tb_order_item WHERE order_id = #{orderId};
    </select>
    
    <select id="queryOrderShippingByOrderId" resultType="OrderShipping" parameterType="String">
        SELECT * FROM tb_order_shipping WHERE order_id = #{orderId};
    </select>

    <select id="queryList" resultMap="pojoResultMap">
        SELECT
            *
        FROM
            <include refid="tableName"/>
    </select>
    
    <select id="queryByID" resultMap="pojoResultMap">
        SELECT
            *
        FROM
            <include refid="tableName"/>
        WHERE order_id = #{id};
    </select>
    
    <select id="queryByWhere" parameterType="Where" resultMap="pojoResultMap">
        SELECT
            *
        FROM
            <include refid="tableName"/>
        WHERE  ${where.column} ${where.operater} #{where.value} LIMIT 1;
    </select>
    
    <select id="queryListByWhere" parameterType="Where" resultMap="pojoResultMap">
        SELECT
            *
        FROM
            <include refid="tableName"/>
        WHERE  ${where.column} ${where.operater} #{where.value};
    </select>
    
    <insert id="save">
        INSERT INTO <include refid="tableName"/> VALUES (#{orderId},#{payment},#{paymentType},#{postFee},#{status},#{createTime},#{updateTime},#{paymentTime},#{consignTime},#{endTime},#{closeTime},#{shippingName},#{shippingCode},#{userId},#{buyerMessage},#{buyerNick},#{buyerRate});
        INSERT INTO tb_order_item VALUES
        <foreach collection="orderItems" item="item" separator=",">
            (#{item.itemId},#{orderId},#{item.num},#{item.title},#{item.price},#{item.totalFee},#{item.picPath})
        </foreach>
        ;
        INSERT INTO tb_order_shipping VALUES (#{orderId},#{orderShipping.receiverName},#{orderShipping.receiverPhone},#{orderShipping.receiverMobile},#{orderShipping.receiverState},#{orderShipping.receiverCity},#{orderShipping.receiverDistrict},#{orderShipping.receiverAddress},#{orderShipping.receiverZip},NOW(),NOW());
    </insert>
    
    <update id="update">
        UPDATE <include refid="tableName"/>
        <set>
            <if test="payment !=null and payment != ''">
                payment = #{payment},
            </if>
            <if test="postFee !=null and postFee != ''">
                post_fee = #{postFee},
            </if>
            <if test="status !=null and status != ''">
                status = #{status},
            </if>
            <if test="updateTime !=null and updateTime != ''">
                update_time = #{updateTime},
            </if>
            <if test="paymentTime !=null and paymentTime != ''">
                payment_time = #{paymentTime},
            </if>
            <if test="consignTime !=null and consignTime != ''">
                consign_time = #{consignTime},
            </if>
            <if test="endTime !=null and endTime != ''">
                end_time = #{endTime},
            </if>
            <if test="closeTime !=null and closeTime != ''">
                close_time = #{closeTime},
            </if>
            <if test="shippingName !=null and shippingName != ''">
                shipping_name = #{shippingName},
            </if>
            <if test="shippingCode !=null and shippingCode != ''">
                shipping_code = #{shippingCode},
            </if>
            <if test="buyerMessage !=null and buyerMessage != ''">
                buyer_message = #{buyerMessage},
            </if>
            <if test="buyerRate !=null and buyerRate != ''">
                buyer_rate = #{buyerRate},
            </if>
        </set>
        WHERE order_id = #{orderId};
    </update>
    
    <delete id="deleteByID" parameterType="Long">
        DELETE FROM <include refid="tableName"/> WHERE order_id = #{orderId};
        DELETE FROM tb_order_item WHERE order_id = #{orderId};
    </delete>
    
    <delete id="deleteByIDS" parameterType="list">
        DELETE FROM <include refid="tableName"/> WHERE order_id IN
        <foreach collection="ids" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>;
        DELETE FROM tb_order_item WHERE order_id IN
        <foreach collection="ids" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>;
    </delete>
    
    <update id="paymentOrderScan" parameterType="Date">
        UPDATE tb_order SET
            status = 6,
            update_time = NOW(),
            close_time = NOW(),
            end_time = NOW()
        WHERE status = 1 AND payment_type = 1 AND create_time &lt;= #{date}
    </update>

    
</mapper>




package com.sugou.store.order.mapper;

import java.util.Date;




import org.apache.ibatis.annotations.Param;

import com.sugou.store.order.pojo.Order;

public interface OrderMapper extends IMapper<Order>{
    
    public void paymentOrderScan(@Param("date") Date date);

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值