package com.yc.ionic.schedule; import com.yc.action.grid.GridUtils; import com.yc.entity.AttachmentConfig; import com.yc.factory.FactoryBean; import com.yc.factory.InitSystem; import com.yc.multiData.SpObserver; import com.yc.service.BaseService; import org.apache.commons.io.FileUtils; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.quartz.QuartzJobBean; import org.springframework.stereotype.Service; import java.io.File; import java.io.FilenameFilter; import java.util.*; /** * 每天定时把app调用生成的增量目录更新到基础包,方便是全新下载时可以下载最新的内容 * -----ionicpage * ----rf * ----rf 基础目录 * ----rf_1257888 增量目录, * ----rf_1245767 增量目录 * ----rf_135677 增量目录 * ----rf.zip 基础包 (app每次重新下载都会直接下载这个包) * ---icc * ---kele * @author danaus */ @Service public class ChcpUpdateZip extends QuartzJobBean { private void prossChcp() { try { //app调用更新时所在根目录 String root =AttachmentConfig.getInstanse().get("Ionic.PageUrl"); File fl = new File(root); //存在才需要执行 if (fl.exists()) { BaseService baseService=(BaseService) FactoryBean.getBean("BaseService"); Map map=new HashMap(8); map.put("开始时间",new Date().toLocaleString()); for (String name : fl.list()) { String path = root + File.separator + name; //处理当前系统下面所有增量目录 File file = new File(path); //不是目录的跳过 if (!file.isDirectory()){ continue;} //name是各个域名: rf //根据系统需要生成的才生成。这些都是读通过9802生成页面时加到队列 map.put(name,name+"-开始查找更新包"); File[] files = file.listFiles((dir, tname) -> { if (!tname.equals(name) && tname.indexOf(".zip")<0) { return true; }else { return false; } }); if (files.length > 0) { //按时间排序,从小到大 (rf_12344444,rf_12376555...) List sortfiles = Arrays.asList(files); Collections.sort(sortfiles, (o1, o2) -> { String str1 = String.valueOf(o1.lastModified()); String str2 = String.valueOf(o2.lastModified()); return str1.compareTo(str2); }); System.out.println(name+"-找到更新包>>"+sortfiles); map.put("更新目录",sortfiles); //然后一个个copy到基础包目录---------- rf // 基础包目录 File rootDir = new File(file.getPath() + File.separator + name+ File.separator); for (File fe : sortfiles) { for(File temp:fe.listFiles()) { if(temp.isFile()) FileUtils.copyFileToDirectory(temp,rootDir); else FileUtils.copyDirectoryToDirectory(temp, rootDir); } //删除增量目录 FileUtils.deleteDirectory(fe); } //先删除 String tempPath=file.getPath() + File.separator+name+"_1.zip"; String Path=file.getPath() + File.separator+name+".zip"; new File(file.getPath() + File.separator +name+".zip").renameTo(new File(tempPath)); //再打包 //最后把基本包目录打包压缩在zip包 -----rf.zip String result= ZipUtil.zip(rootDir.getPath(), null, null); if(result==null){ System.out.println(name+">>>>>>>>压缩出错了"); new File(tempPath).renameTo(new File(Path)); }else{ new File(tempPath).delete(); } map.put(name+"完成时间",new Date().toLocaleString()); } } map.put("完成全部发生时间",new Date().toLocaleString()); try { SpObserver.setDBtoDemo(); baseService.getSimpleJdbcTemplate().update("insert into appinfo(info) values (?)", GridUtils.toJson(map)); }finally { SpObserver.setDBtoInstance(); } } } catch (Exception e) { e.printStackTrace(); } } @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { this.prossChcp(); } public static void main(String[] args) { ChcpUpdateZip chcpUpdateZip=new ChcpUpdateZip(); chcpUpdateZip.prossChcp(); } }