Java tutorial
/******************************************************************************* * 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; } }