SimpleDateFormat sdfParse = new SimpleDateFormat(”MMMMM dd, yyyy”, Locale.ENGLISH);
SimpleDateFormat sdfFormat = new SimpleDateFormat(”yyyy-MM-dd”);
SimpleDateFormat comFormat = new SimpleDateFormat(”yyyyMMdd”);
long start = System.currentTimeMillis();
Config.init(”app.properties”);
//prepare db
StringBuilder sql = null;
Statement st = null;
Connection conn = null;
try{
Class.forName(Config.get(”DB_DRIVER”)).newInstance();
conn = DriverManager.getConnection(Config.get(”DB_DSN”), Config.get(”DB_USERNAME”), Config.get(”DB_PASSWORD”));
st = conn.createStatement();
}catch(InstantiationException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
//change timezone
Calendar calendar = GregorianCalendar.getInstance();
int millisDiff = TimeZone.getTimeZone(Config.get(”TZ_DATA”)).getRawOffset() - TimeZone.getDefault().getRawOffset();
calendar.setTimeInMillis(calendar.getTimeInMillis()+millisDiff);
Calendar calYesterday = (Calendar)calendar.clone();
calYesterday.add(Calendar.DAY_OF_YEAR, -1);
Calendar calLastWeekDay = (Calendar)calYesterday.clone();
calLastWeekDay.add(Calendar.DAY_OF_YEAR, - Integer.parseInt(Config.get(”OFFSET_DAYS”)));
System.out.println(”From: “+sdfFormat.format(calLastWeekDay.getTime()));
System.out.println(”To: “+sdfFormat.format(calYesterday.getTime()));
int i = 0, m = 0;
HashMap<String, HashMap> data = new HashMap<String, HashMap>();
HashMap<String, String> item = null;//new HashMap<String, String>()
String u = Config.get(”START_URL”);
WebClient client = new WebClient();
client.setCssEnabled(false);
client.setJavaScriptEnabled(false);
client.setRedirectEnabled(true);
client.setThrowExceptionOnScriptError(false);
client.setThrowExceptionOnFailingStatusCode(false);
client.setTimeout(0);
try {
//login
HtmlPage p = (HtmlPage) client.getPage(u);
HtmlForm form = (HtmlForm) p.getFormByName(”sign_in”);
HtmlInput email = (HtmlInput) form.getInputByName(”email”);
HtmlInput pass = (HtmlInput) form.getInputByName(”password”);
HtmlInput submit = (HtmlInput) form.getInputByValue(”サインイン”);
email.setValueAttribute(Config.get(”USERNAME”));
pass.setValueAttribute(Config.get(”PASSWORD”));
HtmlPage pr = (HtmlPage) submit.click();
//go to report page
HtmlPage er = client
.getPage(”https://the.report.page”);
form = er.getFormByName(”htmlReport”);
//set options
form.getInputByValue(”exact”).setChecked(true);
form.getSelectByName(”startMonth”).setSelectedAttribute(String.valueOf(calLastWeekDay.get(Calendar.MONTH)), true);
form.getSelectByName(”startDay”).setSelectedAttribute(String.valueOf(calLastWeekDay.get(Calendar.DAY_OF_MONTH)), true);
form.getSelectByName(”startYear”).setSelectedAttribute(String.valueOf(calLastWeekDay.get(Calendar.YEAR)), true);
form.getSelectByName(”endMonth”).setSelectedAttribute(String.valueOf(calYesterday.get(Calendar.MONTH)), true);
form.getSelectByName(”endDay”).setSelectedAttribute(String.valueOf(calYesterday.get(Calendar.DAY_OF_MONTH)), true);
form.getSelectByName(”endYear”).setSelectedAttribute(String.valueOf(calYesterday.get(Calendar.YEAR)), true);
HtmlInput gt = form.getInputByValue(”レポートのダウンロード(CSV形式)”);
InputStream in = null;
//retry if not available
int retry = 0;
while(in == null && retry < 50){
in = gt.click().getWebResponse().getContentAsStream();
if(in == null){
System.out.println(”Data not available! wait for 1 minute…”);
Thread.sleep(60000);
}
retry++;
}
//parse report
BufferedReader br = new BufferedReader(new InputStreamReader(in, “UTF-8″));
String line = null, key = null;
String[] cols = null;
HashMap<String, String> tmp = null;
br.readLine();
while ((line = br.readLine()) != null) {
i++;
item = new HashMap<String, String>();
cols = StringUtils.splitPreserveAllTokens(line, “\t”);//.split(”\t”);
System.out.println(”line”+i+” = “+cols.length);
if(cols.length<11 || i<2){
for(int k=0; k<cols.length; k++){
System.out.println(”cols["+k+"]=”+cols[k]);
}
continue;
}
String settleDate = sdfFormat.format(sdfParse.parse(cols[5]));
key = cols[2].trim()+settleDate;
item.put(”OUTGOINGID”, cols[2].trim());
item.put(”SETTLEDATE”, settleDate);
if(data.containsKey(key)){
tmp = data.get(key);
item.put(”ORDERCOUNT”, String.valueOf(Integer.parseInt(tmp.get(”ORDERCOUNT”)) + Integer.parseInt(cols[8].replaceAll(”,”, “”))));
item.put(”ORDERAMOUNT”, String.valueOf(Double.parseDouble(tmp.get(”ORDERAMOUNT”)) + Double.parseDouble(cols[9].replace(”¥”, “”).replaceAll(”,”, “”))));
item.put(”REVENUE”, String.valueOf(Double.parseDouble(tmp.get(”REVENUE”)) + Double.parseDouble(cols[10].replace(”¥”, “”).replaceAll(”,”, “”))));
}else{
item.put(”ORDERCOUNT”, String.valueOf(Integer.parseInt(cols[8].replaceAll(”,”, “”))));
item.put(”ORDERAMOUNT”, String.valueOf(Double.parseDouble(cols[9].replace(”¥”, “”).replaceAll(”,”, “”))));
item.put(”REVENUE”, String.valueOf(Double.parseDouble(cols[10].replace(”¥”, “”).replaceAll(”,”, “”))));
}
data.put(key, item);
}
br.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
//save report
for(Entry<String, HashMap> entry:data.entrySet()){
item = entry.getValue();
sql = new StringBuilder();
sql.append(”select OUTGOINGID, SETTLEDATE, sum(REVENUE) as REVENUE from “);
sql.append(Config.get(”TBL_CPA”));
sql.append(” where OUTGOINGID=’”);
sql.append(item.get(”OUTGOINGID”));
sql.append(”‘ and to_char(SETTLEDATE, ‘yyyy-mm-dd’)=’”);
sql.append(item.get(”SETTLEDATE”));
sql.append(”‘ group by OUTGOINGID, SETTLEDATE”);
try{
st.execute(sql.toString());
double oldRev = 0;
if(st.getResultSet().next()){
oldRev = st.getResultSet().getDouble(”REVENUE”);
}
System.out.println(”oldRev=”+oldRev);
double newRev = Double.parseDouble(item.get(”REVENUE”));
double varRev = newRev-oldRev;
if (varRev != 0){
System.out.println(”newRev=”+newRev);
sql = new StringBuilder();
sql.append(”insert into “);
sql.append(Config.get(”TBL_CPA”));
sql.append(”(WEBSITE, OUTGOINGID, SETTLEDATE, ORDERAMOUNT, ORDERCOUNT, REVENUE, LOADDATE)”);
sql.append(”values(1, ‘”);
sql.append(item.get(”OUTGOINGID”));
sql.append(”‘, to_date(’”);
sql.append(item.get(”SETTLEDATE”));
sql.append(”‘, ‘yyyy-mm-dd’), “);
sql.append(item.get(”ORDERAMOUNT”));
sql.append(”,”);
sql.append(item.get(”ORDERCOUNT”));
sql.append(”,”);
sql.append(String.valueOf(varRev));
sql.append(”, to_date(’”);
sql.append(sdfFormat.format(calYesterday.getTime()));//
sql.append(”‘, ‘yyyy-mm-dd’))”);
st.execute(sql.toString());
m++;
}else{
System.out.println(”Found no change: “+item.get(”OUTGOINGID”)+” : “+item.get(”SETTLEDATE”));
}
}catch(SQLException e){
e.printStackTrace();
}
}
System.out.println(”total=”+i+”; matched=”+m);
//write log
sql = new StringBuilder();
sql.append(”begin user.log_proceduce(’the_site’, ‘cpa_”);
sql.append(comFormat.format(calYesterday.getTime()));
sql.append(”.dat’,”);
sql.append(m);
sql.append(”,0, null, ‘revenue’); end;”);
try{
st.execute(sql.toString());
}catch(SQLException e){
e.printStackTrace();
}
client = null;
long cost = (System.currentTimeMillis()-start)/1000;
System.out.println(”cost time: “+String.valueOf(cost)+” secs.”);

One Response
Hatmaimub
23|10|2009 1Hello Filthy klooper yet my english jer, buti down nice re application .
Leave a reply
You must be logged in to post a comment.