package com.yesky.apachelog.task;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import com.yesky.apachelog.Property;
import com.yesky.apachelog.model.ApacheDBObject;
import com.yesky.apachelog.model.ObjectActionSum;
import com.yesky.apachelog.model.ObjectDetail;
import com.yesky.apachelog.service.IApacheRegexDAOService;
import com.yesky.apachelog.service.IObjectActionSumService;
import com.yesky.apachelog.util.file.ApacheSparaFileDelTool;
public class ApacheTask {
private List<ApacheDBObject> apacheOList = new ArrayList<ApacheDBObject>();
private IApacheRegexDAOService apacheDaoService;
private IObjectActionSumService actionService;
private List<String> numList = new ArrayList<String>();
public void doTask() {
// 日志文件路径
String fileAndPath = Property.fileAndPath;
// 拆分文件存放路径
String currentPath = Property.currentPat;
// 拆分文件,行数
long fileLineNum = Property.fileLineNum * 10000;
String file[] = fileAndPath.split(",");
for (int i = 0; i < file.length; i++) {
String filePath = file[i];
System.out.println("日志文件路径===============" + filePath);
List<String> separaFileList = apacheDaoService.separatorFileByPath(
filePath, currentPath, fileLineNum);
Iterator<String> it = separaFileList.iterator();
while (it.hasNext()) {
String sparaFilePath = (String) it.next();
System.out.println("拆分文件路径===============" + sparaFilePath);
readSparatorFileByPath(sparaFilePath, fileLineNum);
}
}
}
/**
* 读取拆分后的文件,并把记录出入数据
*
* @param sparaFilePath:拆分后的文件路径
*/
public void readSparatorFileByPath(String sparaFilePath, long fileLineNum) {
System.out.println("-------------读取文件-------------");
FileReader fr = null;
try {
fr = new FileReader(sparaFilePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedReader buf = new BufferedReader(fr, 10 * 1024 * 1024);
String temp = null;
try {
while ((temp = buf.readLine()) != null) {
System.out.println("00000000000000000000000000000");
numList.add(temp);
if (numList.size() % fileLineNum == 0) {
apacheOList.addAll(apacheDaoService
.getDBObListjectFromaLineString(numList));
numList.clear();
if (apacheOList != null && (apacheOList.size() % 5000 == 0)) {
System.out
.println("-------------2222222222222222------------");
this.insertDbLogBatch(apacheOList);
apacheOList.clear();
}
}
}
if (numList != null && numList.size() > 0) {
apacheOList.addAll(apacheDaoService
.getDBObListjectFromaLineString(numList));
numList.clear();
this.insertDbLogBatch(apacheOList);
apacheOList.clear();
}
System.out.println("-------------文件结束------------ "
+ apacheOList.size());
if (apacheOList != null && apacheOList.size() > 0) {
System.out.println("-------------进入数据------------");
this.insertDbLogBatch(apacheOList);
apacheOList.clear();
}
buf.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (buf != null) {
try {
buf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ApacheSparaFileDelTool delTool = new ApacheSparaFileDelTool();
boolean b = delTool.DeleteFolder(sparaFilePath);
if (b) {
System.out.println("删除文件成功 !!!!");
}
}
/**
* 向数据库添加记录
*
* @param dblog:dblog的list对象(符合条件的)
*/
public void insertDbLogBatch(final List<ApacheDBObject> dblog) {
Iterator<ApacheDBObject> it = dblog.iterator();
System.out.println("插入数据库。。。。。。。。。。。。。。。dblog。。" + dblog.size());
while (it.hasNext()) {
ApacheDBObject log = (ApacheDBObject) it.next();
ObjectActionSum objectActionSumVO = new ObjectActionSum();
ObjectDetail objectDetail = new ObjectDetail();
String name = log.getModuleName().trim();
System.out.println("-----------name = " + name);
if (("1").equals(name) || ("2").equals(name)) {
// 电影
if (("1").equals(name)) {
Integer srcid = Integer.parseInt(log.getSrcId());
objectActionSumVO.setTarObjTypeId(3);// 电影库类型
objectActionSumVO.setSrcObjTypeId(3);// 电影库类型
// 模块名称
objectActionSumVO.setSuffix("MOVIE");
objectActionSumVO.setTarObjId(Integer.parseInt(log
.getTargetId()));
objectActionSumVO.setSrcObjId(srcid);
objectActionSumVO.setStatus(1);
objectActionSumVO.setActionId(41);// 动作为看了又看
objectActionSumVO.setScore(0);
objectActionSumVO.setActionTime(new Date());
objectActionSumVO.setActionCount(1);
objectActionSumVO.setTableName("MOVIE" + "_"
+ String.valueOf(srcid / 10000 + 1));
objectDetail.setObjId(objectActionSumVO.getSrcObjId());
objectDetail.setSuffix(objectActionSumVO.getSuffix());
} else if (("2").equals(name))// 产品
{
Integer srcid = Integer.parseInt(log.getSrcId());
objectActionSumVO.setTarObjTypeId(1);// 产品库类型
objectActionSumVO.setSrcObjTypeId(1);// 产品库类型
// 模块名称
objectActionSumVO.setSuffix("CPK");
objectActionSumVO.setTarObjId(Integer.parseInt(log
.getTargetId()));
objectActionSumVO.setSrcObjId(srcid);
objectActionSumVO.setStatus(1);
objectActionSumVO.setActionId(41);// 动作为看了又看
objectActionSumVO.setScore(0);
objectActionSumVO.setActionTime(new Date());
objectActionSumVO.setActionCount(1);
objectActionSumVO.setTableName("CPK" + "_"
+ String.valueOf(srcid / 10000 + 1));
objectDetail.setObjId(objectActionSumVO.getSrcObjId());
objectDetail.setSuffix(objectActionSumVO.getSuffix());
}
System.out.println("objectDetail === "
+ objectDetail.getSuffix());
// 创建表
this.createObjectActionSumTable(objectDetail);
// 更新记录
int count = this.actionService
.updateObjectActionSum(objectActionSumVO);
// 如果记录不存在,添加新纪录
if (count <= 0) {
this.actionService.insertObjectActionSum(objectActionSumVO);
}
} else {
System.out
.println("暂时不处理--------------------------------------");
}
}
}
public void createObjectActionSumTable(ObjectDetail objectDetail) {
String tableName = null;
ObjectActionSum objectActionSumVO = new ObjectActionSum();
System.out
.println("要创建的表:........................objectDetail.getSuffix()........... "
+ objectDetail.getSuffix());
try {
if (objectDetail != null && objectDetail.getSuffix() != null) {
tableName = objectDetail.getSuffix().toUpperCase() + "_"
+ String.valueOf((objectDetail.getObjId() / 10000) + 1);
System.out.println("要创建的表:................................... "
+ tableName);
objectActionSumVO.setTableName(tableName);
actionService.createObjSumTable(objectActionSumVO);
actionService.createObjSumTableIndex(objectActionSumVO);
}
} catch (Exception e) {
System.out.println("要创建的表:OBJ_ACTION_SUM_" + tableName + "已存在。");
}
}
public IObjectActionSumService getActionService() {
return actionService;
}
public void setActionService(IObjectActionSumService actionService) {
this.actionService = actionService;
}
public IApacheRegexDAOService getApacheDaoService() {
return apacheDaoService;
}
public void setApacheDaoService(IApacheRegexDAOService apacheDaoService) {
this.apacheDaoService = apacheDaoService;
}
}