package com.fet.ebpp.handler;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.Properties;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import com.fet.ebpp.handler.utils.common.PropertiesInJar;
import com.fet.ebpp.handler.utils.jdbc.BatchInsertDB;
import com.fet.ebpp.handler.utils.jdbc.SqlModel;
/**
退郵資料維護
1. Batch Process 讀取固定路徑設定文件處理
2. update 退郵資訊,顯示在投遞結果
@author */
public class E10Handler implements Job {
Properties gmcPro = new Properties();
String e10AfpPath =null;
/**
默認的構造方法
@roseuid 46835C1503D8
*/
public E10Handler() {
try {
gmcPro = PropertiesInJar.getPropertiesFile("GMC.properties");
e10AfpPath=gmcPro.getProperty("E10HandlerAfpPath");
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
E10Handler開始執行的入口
查找固定路徑下的txt文件(退郵報表),固定路徑由property文件設定,並將文件名傳遞給exe
cute
if(execute成功)將被處理的文件move到另一路徑下,此路徑由property文件設定。
@param args[]
@roseuid 46835C1201A5
*/
public static void main(String args[]) {
try {
E10Handler e10=new E10Handler();
e10.startSchedule();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
執行E10Handler的操作
讀取txt文件(退郵報表),把讀取到的信息update到數據庫表(TN_TASK).
更新字段:"輸入日期"-->TN_TASK.CN_DELIVERY_RESULT_DATE;
"退郵原因代碼"-->TN_TASK.cn_delivery_result_return_reason,
TN_TASK.CN_DELIVERY_RESULT_STATUS標記為"0",
TN_TASK.CN_LAST_UPDATE_DATE設定系統日期,
TN_TASK.CN_LAST_UPDATE_USER_NUM暫時寫為system
Where: "帳號"TN_TASK.CN_TASK_NUM
@param filename
@return boolean
@roseuid 46835C19003E
*/
public boolean executeUpdate(String filename) {
//1。讀取固定路徑下的txt文件(退郵報表),固定路徑由property文件設定。
String strLine;
try {
InputStream is = new FileInputStream(filename);
InputStreamReader isReader = new InputStreamReader(is);
BufferedReader bReader = new BufferedReader(isReader);
while ((strLine = bReader.readLine()) != null) {
//2。把讀取到的信息update到數據庫表(TN_TASK).
String[] strArray = strLine.split(",");
if (strArray.length == 3) {
//輸入日期
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy/MM/dd HH:mm:ss");
ParsePosition pos = new ParsePosition(0);
Date deliveryResultDate = formatter.parse(strArray[0], pos);
//去第三欄位的引號
String field3 = strArray[2].trim();
if (field3.substring(0, 1).equals("/"")) {
field3 = field3.substring(1);
}
if (field3.substring(field3.length() - 1, field3.length())
.equals("/"")) {
field3 = field3.substring(0, field3.length() - 1);
}
SqlModel smodel = new SqlModel();
smodel
.setSqlStr("update TN_TASK set CN_DELIVERY_RESULT_DATE=?,CN_DELIVERY_RESULT_RET_REASON=?,CN_DELIVERY_RESULT_STATUS='0',CN_LAST_UPDATE_DATE=?,CN_LAST_UPDATE_USER_NUM='system' where CN_BARCODE=?");
Object sqlValue[] = new Object[] {
new java.sql.Timestamp(deliveryResultDate.getTime()),
strArray[1],
new java.sql.Timestamp(new Date().getTime()),
field3 };
smodel.setParamValues(Arrays.asList(sqlValue));
Collection col = new ArrayList();
col.add(smodel);
BatchInsertDB.insertIntoDb(col);
}
else {
throw new Exception(filename.toString());
}
}
bReader.close();
return true;
}
catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
catch (IOException e) {
e.printStackTrace();
return false;
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
/* (non-Javadoc)
* @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
*/
public void execute(JobExecutionContext arg0) throws JobExecutionException {
E10Handler e10Handler=(E10Handler)arg0.getJobDetail().getJobDataMap().get("E10HandlerTemp");
// TODO Auto-generated method stub
Scheduler scheduler = arg0.getScheduler();
System.out.println("########## E10 Start ###########");
// Properties properties = PropertiesInJar
// .getPropertiesFile("GMC.properties");
// String e10AfpPath = gmcCSVReader.getValue(properties, "E10HandlerAfpPath");
// String e10FilePath=gmcCSVReader.getValue(properties, "E10HandlerFilePath");
String e10FilePath = e10Handler.gmcPro
.getProperty("E10HandlerFilePath");
//File e10ParentPath=new File(e10FilePath);
File[] afpPath = new File(e10AfpPath).listFiles();
if (null != afpPath && afpPath.length > 0) {
for (int i = 0; i < afpPath.length; i++) {
if (e10Handler.executeUpdate(afpPath[i].getPath())) {
try {
File destFile=new File(e10FilePath + afpPath[i].getName());
if(destFile.exists()){
destFile.delete();
}
destFile.createNewFile();
InputStream is = new FileInputStream(afpPath[i]);
InputStreamReader isReader = new InputStreamReader(
is);
BufferedReader bReader = new BufferedReader(
isReader);
OutputStream os = new FileOutputStream(new File(
e10FilePath + afpPath[i].getName()));
OutputStreamWriter osWrite = new OutputStreamWriter(
os);
BufferedWriter bWriter = new BufferedWriter(osWrite);
int len;
char[] cbuf = new char[1024];
while ((len = bReader.read(cbuf)) != -1) {
bWriter.write(cbuf, 0, len);
}
bWriter.flush();
is.close();
bReader.close();
bWriter.close();
os.close();
boolean del=afpPath[i].delete();
System.out.println(afpPath[i]+" delete "+del);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
try {
System.out.println("finished");
scheduler.deleteJob("e10HandlerJob", Scheduler.DEFAULT_GROUP);
scheduler.shutdown();
}
catch (SchedulerException e) {
e.printStackTrace();
}
}
}
/**
* 功能:1〉定制 幾時開始,結束,多長時間執行一次等
* 2〉傳遞定時執行的任務需要的參數
* @throws Exception
*/
public void startSchedule() throws Exception {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail jobDetail = new JobDetail("e10HandlerJob",
Scheduler.DEFAULT_GROUP, E10Handler.class);
//定時任務需要的參數從這裡set 進取
JobDataMap jdm = new JobDataMap();
jdm.put("E10HandlerTemp",this);
jobDetail.setJobDataMap(jdm);
String cronExpression = this.gmcPro
.getProperty("E10CronExpression");
CronTrigger trigger = new CronTrigger("E10", null, cronExpression);
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
}