com.mysoft.b2b.event.scheduler.job.EventJob.java Source code

Java tutorial

Introduction

Here is the source code for com.mysoft.b2b.event.scheduler.job.EventJob.java

Source

/**
 * Copyright mysoft Limited (c) 2014. All rights reserved.
 * This software is proprietary to and embodies the confidential
 * technology of mysoft Limited. Possession, use, or copying
 * of this software and media is authorized only pursuant to a
 * valid written license from mysoft or an authorized sublicensor.
 */
package com.mysoft.b2b.event.scheduler.job;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;

import com.mysoft.b2b.commons.scheduler.MysoftJob;
import com.mysoft.b2b.event.api.app.AppSubscribe;
import com.mysoft.b2b.event.api.app.AppSubscribeCriteria;
import com.mysoft.b2b.event.api.app.AppSubscribeService;
import com.mysoft.b2b.event.api.event.Event;
import com.mysoft.b2b.event.api.event.EventCriteria;
import com.mysoft.b2b.event.api.event.EventLog;
import com.mysoft.b2b.event.api.event.EventLogStatus;
import com.mysoft.b2b.event.api.event.EventService;
import com.mysoft.b2b.event.api.event.EventStatus;

/**
 * chengp:    ???LOG
 * @version   Revision History
 * <pre>
 * Author    Version       Date        Changes
 * chengp    1.0           2014828     Created
 *
 * </pre>
 * @since b2b 2.0.0
 */
public class EventJob extends MysoftJob {

    private static Logger log = Logger.getLogger(EventJob.class);

    @Autowired
    private EventService eventService;

    @Autowired
    private AppSubscribeService appSubscribeService;

    @Override
    public void run() {
        log.info("???LOG-->.......");

        //1. ?,
        List<Event> notExecuteEvents = this.getNotExecuteEvents();
        int eventNumber = CollectionUtils.isEmpty(notExecuteEvents) ? 0 : notExecuteEvents.size();
        log.info("???LOG-->??" + eventNumber);
        if (0 == eventNumber) {
            log.info(
                    "???LOG-->???log?");
            return;
        }

        //2. app Map<String(eventType),List<AppSubscribe>>
        List<AppSubscribe> appSubscribes = this.getAppSubscribes();
        if (CollectionUtils.isEmpty(appSubscribes)) {
            log.info("???LOG-->app?");
            return;
        }
        Map<String, List<AppSubscribe>> subscripeGroup = this.getAppSubGroup(appSubscribes);

        //3. ??: ?--?log--?
        for (int i = 0; i < notExecuteEvents.size(); i++) {
            log.info("???LOG-->" + (i + 1) + "?log");
            Event event = notExecuteEvents.get(i);
            try {
                //?:?dealing??
                this.startToDealJob(event);

                //?log
                boolean flag = this.parseLog(event, subscripeGroup.get(event.getTypeCode()));

                //?:?success??
                if (flag) {
                    this.finishToDealJob(true, event, null);
                } else {
                    this.finishToDealJob(false, event, null);
                }
            } catch (Exception e) {
                this.finishToDealJob(false, event, e);
            }
        }
        log.info("???LOG-->?");
    }

    /**
     * ?event?
     * @param 
     */
    private List<Event> getNotExecuteEvents() {
        EventCriteria criteria = new EventCriteria();
        criteria.setCurrentPage(1);
        criteria.setLastDealtTime(new Date());
        return eventService.getNotExecuteEvent(criteria);
    }

    /**
     * ?app?
     * @param 
     */
    private List<AppSubscribe> getAppSubscribes() {
        AppSubscribeCriteria criteria = new AppSubscribeCriteria();
        criteria.setOffset(0);
        criteria.setPageSize(500);
        criteria = appSubscribeService.getAppSubscribeList(criteria);
        return criteria.getList();
    }

    /**
     * ?
     * @param 
     */
    private void updateEvent(Event event, EventStatus status) {
        if (null != event && null != status) {
            event.setStatus(status.getValue());
            event.setLastDealtTime(new Date());
            eventService.updateEvent(event);
        }
    }

    /**
     * ?log??
     * @param event
     */
    private void startToDealJob(Event event) {
        if (null != event) {
            this.updateEvent(event, EventStatus.DEALING);
        }
    }

    /**
     * ?log??
     * @param flag
     * @param event
     * @param e
     */
    private void finishToDealJob(boolean flag, Event event, Exception e) {
        if (null != event) {
            if (flag) {
                event.setRemark("??!");
                this.updateEvent(event, EventStatus.SUCCESS);
            } else {
                if (e != null) {
                    if (e.getMessage().length() > 200) {
                        event.setRemark(e.getMessage().substring(0, 200));
                    } else {
                        event.setRemark(e.getMessage());
                    }
                } else {
                    event.setRemark("?!");
                }
                this.updateEvent(event, EventStatus.FAILED);
            }
        }
    }

    /**
     * app?
     * @param list 
     */
    private Map<String, List<AppSubscribe>> getAppSubGroup(List<AppSubscribe> appSubscribes) {
        Map<String, List<AppSubscribe>> group = new HashMap<String, List<AppSubscribe>>();
        if (!CollectionUtils.isEmpty(appSubscribes)) {
            for (AppSubscribe sub : appSubscribes) {
                if (group.containsKey(sub.getEventTypeCode())) {
                    group.get(sub.getEventTypeCode()).add(sub);
                } else {
                    List<AppSubscribe> element = new ArrayList<AppSubscribe>();
                    element.add(sub);
                    group.put(sub.getEventTypeCode(), element);
                }
            }
        }
        return group;
    }

    /**
     *?log
     *@param event 
     *@param appSubscribes app?
     */
    private boolean parseLog(Event event, List<AppSubscribe> appSubscribes) {
        if (!CollectionUtils.isEmpty(appSubscribes)) {
            for (AppSubscribe sub : appSubscribes) {
                EventLog eventLog = new EventLog();
                eventLog.setCreatedBy(event.getCreatedBy());
                eventLog.setCreatedTime(new Date());
                eventLog.setEventContent(event.getEventContent());
                eventLog.setEventId(event.getEventId());
                //eventLog.setRemark(event.getRemark()); //eventLogremark?
                eventLog.setStatus(EventLogStatus.DEFAULT.getValue());
                eventLog.setTypeCode(event.getTypeCode());
                eventLog.setAppId(sub.getAppId());
                eventService.insertEventLog(eventLog);
                log.info("???LOG-->?log?ID"
                        + event.getEventId() + " appid:" + sub.getAppId());
            }
            return true;
        } else {
            log.info("???LOG-->:" + event.getTypeCode()
                    + ",app???log");
        }
        return false;
    }

}