org.springside.examples.schedule.service.ScheduleService.java Source code

Java tutorial

Introduction

Here is the source code for org.springside.examples.schedule.service.ScheduleService.java

Source

/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package org.springside.examples.schedule.service;

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

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springside.examples.oadata.entity.BulletinView;
import org.springside.examples.oadata.entity.BuyerView;
import org.springside.examples.oadata.entity.ProjectPkgView;
import org.springside.examples.oadata.entity.ProjectView;
import org.springside.examples.oadata.entity.TenderView;
import org.springside.examples.oadata.repository.BulletinViewDao;
import org.springside.examples.oadata.repository.BuyerViewDao;
import org.springside.examples.oadata.repository.ProjectViewDao;
import org.springside.examples.oadata.repository.TenderViewDao;
import org.springside.examples.oadata.service.TenderViewService;
import org.springside.examples.quickstart.entity.BulletinData;
import org.springside.examples.quickstart.entity.BuyerData;
import org.springside.examples.quickstart.entity.ProjectData;
import org.springside.examples.quickstart.entity.ProjectPkgData;
import org.springside.examples.quickstart.repository.BulletinDataDao;
import org.springside.examples.quickstart.repository.BuyerDataDao;
import org.springside.examples.quickstart.repository.ProjectDataDao;
import org.springside.examples.quickstart.service.BuyerDataService;
import org.springside.examples.quickstart.service.ProjectDataService;
import org.springside.examples.schedule.bean.Result;

// Spring Bean.
@Component
// public?.
@Transactional
public class ScheduleService {
    private static Logger logger = LoggerFactory.getLogger(ScheduleService.class);

    static final int STEPJUMPBUYERNUM = 500;
    static final int STEPJUMPPROJECTNUM = 2;
    static final int STEPJUMPBULLETINNUM = 2;

    /*?  ?? 500*/
    static int stepJumpBuyer = STEPJUMPBUYERNUM;
    /*?  ?? 2*/
    static int stepJumpProject = STEPJUMPPROJECTNUM;
    /*?  ?? 2*/
    static int stepJumpBulletin = STEPJUMPBULLETINNUM;

    static Date backSynProjectFromDate = null;

    static Date backSynBulletinFromDate = null;

    static ThreadPoolTaskExecutor poolTaskExecutor;

    static {
        try {
            //?
            poolTaskExecutor = new ThreadPoolTaskExecutor();
            //  
            poolTaskExecutor.setQueueCapacity(200);
            //?  
            poolTaskExecutor.setCorePoolSize(5);
            //?  
            poolTaskExecutor.setMaxPoolSize(1000);
            //?  
            poolTaskExecutor.setKeepAliveSeconds(30000);
            poolTaskExecutor.initialize();
        } catch (Exception e) {
            logger.error("?{}:" + ScheduleService.class.getName() + e.getStackTrace());
        }
    }

    @Autowired
    private BulletinViewDao bulletinViewDao;
    @Autowired
    private BulletinDataDao bulletinDataDao;
    @Autowired
    private ProjectViewDao projectViewDao;
    @Autowired
    private ProjectDataDao projectDataDao;
    @Autowired
    private BuyerViewDao buyerViewDao;
    @Autowired
    private BuyerDataDao buyerDataDao;
    @Autowired
    private BuyerDataService buyerDataService;
    @Autowired
    private ProjectDataService projectDataService;

    @Autowired
    TenderViewDao tenderViewDao;

    @Autowired
    TenderViewService tenderViewService;

    public void updateGetedBulletin() throws Exception {
        //?, XX
        Date maxAnnouncementDate = bulletinDataDao.findMaxAnnouncementDate();

        //
        Date getFrom;
        if (maxAnnouncementDate != null) {//?? ??   XX
            getFrom = maxAnnouncementDate;
        } else {//?
            getFrom = DateUtils.addDays(bulletinViewDao.findMinAnnouncementDate(), -1);
        }
        //? (step)
        Date getTo = DateUtils.addMonths(getFrom, stepJumpBulletin);

        //??
        List<BulletinView> bulletinViews = bulletinViewDao.getBulletinViewFromToTime(getFrom, getTo);

        //
        List<BulletinData> bulletinDatas = new ArrayList<BulletinData>();
        if (bulletinViews != null && bulletinViews.size() > 0) {
            for (BulletinView bulletinView : bulletinViews) {
                BulletinData dest = new BulletinData();
                BeanUtils.copyProperties(dest, bulletinView);
                dest.setSynStatus(BulletinData.SYNSTATUS_STANBY);
                bulletinDatas.add(dest);
            }
        }
        //?
        bulletinDataDao.save(bulletinDatas);
        System.out.println("??" + bulletinDatas.size() + "?step=" + stepJumpBulletin);
        //step
        if (bulletinDatas.size() == 0 && getTo.before(DateUtils.addMonths(new Date(), 12))) {//??
            stepJumpBulletin += stepJumpBulletin;
        } else {
            stepJumpBulletin = STEPJUMPBULLETINNUM;
        }
    }

    public void updateGetedProject() throws Exception {
        //, XX
        Date maxDelegateDate = projectDataDao.findMaxDelegateDate();

        //
        Date getFrom;
        if (maxDelegateDate != null) {//?? ??   XX
            getFrom = maxDelegateDate;
        } else {//?
            getFrom = DateUtils.addDays(projectViewDao.findMinDelegateDate(), -1);
        }
        //? (step)
        Date getTo = DateUtils.addMonths(getFrom, stepJumpProject);

        //??
        List<ProjectView> projectViews = projectViewDao.getProjectViewFromToTime(getFrom, getTo);

        //
        List<ProjectData> projectDatas = new ArrayList<ProjectData>();
        List<ProjectPkgData> projectPkgDatas = new ArrayList<ProjectPkgData>();
        this.buildProjectAndPkg(projectViews, projectDatas, projectPkgDatas);

        //?
        projectDataDao.save(projectDatas);
        projectDataDao.save(projectPkgDatas);

        //?, ?????? getFrom ??  ? ????
        Date currentDate = new Date();
        if (getTo.after(currentDate)) {//?getTo  ??
            if (backSynProjectFromDate == null) {
                backSynProjectFromDate = currentDate;//?
            }
            long oaprojCount = projectViewDao.countBeforeDate(backSynProjectFromDate);
            long projCount = projectDataDao.countBeforeDate(backSynProjectFromDate);
            if (oaprojCount != projCount) {

                System.out.println("oaprojCount:" + oaprojCount + ", projCount:" + projCount);
                // 

                //-7     oa
                List<ProjectView> oaProjectViews = projectViewDao.getProjectViewFromToTime(
                        DateUtils.addDays(backSynProjectFromDate, -7), backSynProjectFromDate);
                //-7     local
                List<ProjectData> localProjectDatas = projectDataDao.getProjectDateFromToTime(
                        DateUtils.addDays(backSynProjectFromDate, -7), backSynProjectFromDate);

                //?local 
                List<ProjectView> notInLocalProjectViews = new ArrayList<ProjectView>();
                //?oa    
                List<ProjectData> notInOaProjectDatas = new ArrayList<ProjectData>();

                System.out.println(
                        "projectviews:" + oaProjectViews.size() + ",projectdatas:" + localProjectDatas.size());
                //??
                for (ProjectView projectView : oaProjectViews) {
                    boolean inLocal = false;
                    for (ProjectData projectData : localProjectDatas) {
                        if (StringUtils.equals(projectView.getProjectId(), projectData.getProjectId())) {
                            inLocal = true;
                            break;
                        }
                    }
                    if (!inLocal) {
                        System.out.println("notInLocalProjectViewId:" + projectView.getProjectId());
                        notInLocalProjectViews.add(projectView);
                    }
                }
                //??
                for (ProjectData projectData : localProjectDatas) {
                    boolean inOa = false;
                    for (ProjectView projectView : oaProjectViews) {
                        if (StringUtils.equals(projectData.getProjectId(), projectView.getProjectId())) {
                            inOa = true;
                            break;
                        }
                    }
                    if (!inOa) {
                        System.out.println("notInOaProjectDataId:" + projectData.getProjectId());
                        notInOaProjectDatas.add(projectData);
                    }
                }

                //?local
                if (notInLocalProjectViews != null && notInLocalProjectViews.size() > 0) {
                    List<ProjectData> projectDataBks = new ArrayList<ProjectData>();
                    List<ProjectPkgData> projectPkgDataBks = new ArrayList<ProjectPkgData>();
                    this.buildProjectAndPkg(notInLocalProjectViews, projectDataBks, projectPkgDataBks);
                    projectDataDao.save(projectDataBks);
                    projectDataDao.save(projectPkgDataBks);
                    System.out.println("??" + projectDataBks.size() + "?, ?"
                            + projectPkgDataBks.size() + "?");
                }

                //?oa
                if (notInOaProjectDatas != null && notInOaProjectDatas.size() > 0) {
                    for (ProjectData projectData : notInOaProjectDatas) {
                        projectData.setUseStatus(ProjectData.USESTATUS_INVALID);//
                        //TODO ?????
                    }
                    projectDataDao.save(notInOaProjectDatas);
                    System.out.println("/?" + notInOaProjectDatas.size() + "?");
                }

                backSynProjectFromDate = DateUtils.addDays(backSynProjectFromDate, -7);//?
            } else {
                //?? ?  backSynProjectFromDate null
                backSynProjectFromDate = null;
            }
            System.out.println("" + backSynProjectFromDate);
        }
        System.out.println("??" + projectDatas.size() + "?, ?" + projectPkgDatas.size()
                + "?step=" + stepJumpProject);
        //step
        if (projectDatas.size() == 0 && getTo.before(DateUtils.addMonths(new Date(), 12))) {//??
            stepJumpProject += stepJumpProject;
        } else {
            stepJumpProject = STEPJUMPPROJECTNUM;
        }
    }

    /**
     * ?  project    package 
     * @param projectViews
     * @param projectDatas
     * @param projectPkgDatas
     */
    public void buildProjectAndPkg(List<ProjectView> projectViews, List<ProjectData> projectDatas,
            List<ProjectPkgData> projectPkgDatas) {

        if (projectViews != null && projectViews.size() > 0) {
            for (ProjectView projectView : projectViews) {
                if (projectView instanceof ProjectPkgView) {
                    ProjectPkgView projectPkgView = (ProjectPkgView) projectView;
                    System.out.println("ID:" + projectPkgView.getProjectId() + ", ??:"
                            + projectPkgView.getProjectName());
                    ProjectPkgData dest = new ProjectPkgData();
                    org.springframework.beans.BeanUtils.copyProperties(projectPkgView, dest, "parentProject");
                    if (projectPkgView.getParentProject() != null) {
                        ProjectData parentDest = new ProjectData();
                        parentDest.setProjectId(projectPkgView.getParentProject().getProjectId());
                        dest.setParentProject(parentDest);
                    }
                    dest.setSynStatus(ProjectData.SYNSTATUS_STANBY);
                    dest.setUseStatus(ProjectData.USESTATUS_VALID);
                    projectPkgDatas.add(dest);
                } else {
                    System.out.println(
                            "ID:" + projectView.getProjectId() + ", ??:" + projectView.getProjectName());
                    ProjectData dest = new ProjectData();
                    org.springframework.beans.BeanUtils.copyProperties(projectView, dest, "parentProject");
                    dest.setSynStatus(ProjectData.SYNSTATUS_STANBY);
                    dest.setUseStatus(ProjectData.USESTATUS_VALID);
                    dest.setProjectPkgDatas(null);
                    projectDatas.add(dest);
                }
            }
        }

        for (ProjectPkgData projectPkgData : projectPkgDatas) {
            boolean match = false;
            for (ProjectData projectData : projectDatas) {
                if (projectData.getProjectId().equals(projectPkgData.getParentProject().getProjectId())) {
                    projectPkgData.setParentProject(projectData);
                    match = true;
                    break;
                }
            }

            if (!match) {
                ProjectData parentProject = projectDataDao
                        .getProject(projectPkgData.getParentProject().getProjectId());
                if (parentProject != null) {
                    projectPkgData.setParentProject(parentProject);
                    match = true;
                }
            }

            System.out.println("nomatch:" + match + ":id" + projectPkgData.getProjectId() + "pid:"
                    + projectPkgData.getParentProject().getProjectId());
        }
    }

    public void updateGetedBuyer() throws Exception {
        //, XX
        Integer maxCustomerId = buyerDataDao.findMaxCustomerId();

        //
        Integer getFrom;
        if (maxCustomerId != null) {//?? ??   XX
            getFrom = maxCustomerId;
        } else {//?
            getFrom = buyerViewDao.findMinCustomerId() - 1;
        }
        //? (500step)
        Integer getTo = getFrom + stepJumpBuyer;

        //??
        List<BuyerView> buyertViews = buyerViewDao.getBuyerViewFromToID(getFrom, getTo);

        //
        List<BuyerData> buyerDatas = new ArrayList<BuyerData>();
        if (buyertViews != null && buyertViews.size() > 0) {
            for (BuyerView buyerView : buyertViews) {
                BuyerData dest = new BuyerData();
                BeanUtils.copyProperties(dest, buyerView);
                dest.setSynStatus(BuyerData.SYNSTATUS_STANBY);//???
                buyerDatas.add(dest);
            }
        }
        //?
        buyerDataDao.save(buyerDatas);
        System.out.println("??" + buyerDatas.size() + "?step=" + stepJumpBuyer);

        //step
        if (buyerDatas.size() == 0 && stepJumpBuyer <= 300000) {
            stepJumpBuyer += stepJumpBuyer;
        } else {
            stepJumpBuyer = STEPJUMPBUYERNUM;
        }
    }

    static Date synProjectfromDate = null;

    public void synProjectToZTB() {
        if (synProjectfromDate == null) {
            synProjectfromDate = DateUtils.addDays(projectDataDao.findMinSynDate(), -1);
        }
        if (synProjectfromDate.after(new Date())) {
            synProjectfromDate = DateUtils.addDays(new Date(), -1);
        }
        Date synToDate = DateUtils.addDays(synProjectfromDate, 30);

        List<ProjectData> projectDatas = projectDataDao.getSynProjectDateFromToTime(synProjectfromDate, synToDate);

        try {
            int count = 0;
            System.out.println("" + synProjectfromDate + "" + synToDate);
            for (ProjectData projectData : projectDatas) {
                if (projectData.getSynStatus() < ProjectData.SYNSTATUS_BASEINFO_SUCCESS) {
                    try {
                        //??
                        buyerDataService.synBuyerProccess(projectData);
                        //??
                        if (projectDataService.synProjectProccess(projectData)) {
                            count++;
                        }
                    } catch (Exception e) {
                        logger.error(e.getMessage());
                    }
                }
            }
            logger.info("from {} to {} updateProjectNumber{} ", synProjectfromDate, synToDate, count);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        synProjectfromDate = synToDate;
    }

    static Long synSupplierfromId = null;

    public void synSupplierToZTB() {
        if (synSupplierfromId == null) {
            synSupplierfromId = tenderViewDao.findMinId4Syn() - 1;
        }
        Long maxId = tenderViewDao.findMaxId4Syn();
        if (synSupplierfromId >= maxId) {
            synSupplierfromId = maxId;
        }
        Long synSupplierToId = synSupplierfromId + 500;

        List<TenderView> tenderViews = tenderViewDao.getSynTenderViewFromTo(synSupplierfromId, synSupplierToId);
        try {
            int count = 0;
            for (TenderView tenderView : tenderViews) {
                try {
                    Result result = tenderViewService.synTenderProccess(tenderView);
                    if (result.isSuccess()) {
                        count++;
                    }
                } catch (Exception e) {
                    logger.error(e.getMessage());
                }
            }
            System.out.println("" + synSupplierfromId + "" + synSupplierToId
                    + "" + count + "");
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        synSupplierfromId = synSupplierToId;
    }
}