You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

310 lines
15 KiB
Java

package center.data;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.base.FileStreamParser;
import com.base.FileWorker;
import center.data.format.CpnDisuseDataRecord;
import center.data.format.FixTicketDataRecord;
/**
* 쿠폰폐기정보<BR>
* @author jckim
* @since JDK 1.4.1
* @version 0.1, 2007-09-28 초기 작성
*/
public class ApplyCpnDisuse extends FileWorker
{
private String sPrcsName = "ApplyCpnDisuse";
public static final int REC_LEN = 200; // 레코드 길이
public static final int LOG_COUNT = 50000; // log count
private ResultSet rs = null;
private PreparedStatement psSls = null;
private PreparedStatement psIns1 = null;
private PreparedStatement psIns2 = null;
private PreparedStatement psUpd1 = null;
private PreparedStatement psUpd2 = null;
private PreparedStatement psUpd3 = null;
private PreparedStatement psUpd4 = null;
private PreparedStatement psUpd5 = null;
/**
* 실행
*/
@Override
public void execute() throws Exception
{
try
{
logger.logInfo(sPrcsName + " is started");
logger.logInfo( ".... file name : " + file.getName() );
initialize(); // 초기화
String sTemp = null;
while((sTemp = inFile.readBytes(REC_LEN)) != null && sTemp.length() > 2){
nReadCount++;
if( sTemp.charAt(10) == 'D'){
// 데이터 반영
processRecord(new CpnDisuseDataRecord(sTemp));
}else
continue;
}
logger.logInfo(".... File Read Count : "+ nReadCount );
logger.logInfo(".... DB Insert Count : "+ nInsertCount);
logger.logInfo(".... DB Update Count : "+ nUpdateCount);
logger.logInfo(sPrcsName + " is ended");
}
catch(Exception ex)
{
try{ conn.rollback();}catch(Exception e){}
logger.logFail( sPrcsName + " fail");
logger.logTrace(ex);
throw ex;
}finally{
finalize();
}
}
/**
* 초기화
* @throws SQLException
*/
public void initialize() throws SQLException{
try
{
nReadCount = 0;
nInsertCount = 0;
nUpdateCount = 0;
nDeleteCount = 0;
inFile = new FileStreamParser();
inFile.openReadFile(file);
String query;
query = "SELECT COUNT(*) "
+ " FROM DAY_FIX_STOCK_INFO "
+ " WHERE FARE_OFFICE_ID = ? "
+ " AND YEAR = ? "
+ " AND MONTH = ? "
+ " AND DAY = ? ";
psSls = conn.prepareStatement(query);
query = "INSERT INTO DAY_FIX_STOCK_INFO( "
+ " FARE_OFFICE_ID, YEAR, MONTH, DAY, RETURN_COUPON_COUNT, "
+ " K_RET_COUPON_CNT, CREATE_DATE, CREATER, UPDATE_DATE, UPDATER "
+ " ) "
+ "VALUES (?,?,?,?,?,?,SYSDATE,'COMM',SYSDATE,'COMM') ";
psIns1 = conn.prepareStatement(query);
query = "INSERT INTO COUPON_DISUSE_INFO( "
+ " FARE_OFFICE_ID, DISUSE_DATE, DISUSE_SEQNO, COUPON_KBN, FARE_YEAR, "
+ " FARE_MONTH, FARE_DAY, COUPON_COUNT, DISUSE_PERSON, DISUSE_COUNT, "
+ " K_COUPON_CNT, K_DISUSE_CNT, CREATE_DATE, CREATER, UPDATE_DATE, UPDATER "
+ " ) "
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,SYSDATE,'COMM',SYSDATE,'COMM') ";
psIns2 = conn.prepareStatement(query);
query = "UPDATE FARE_ADJUST_INFO "
+ " SET COUPON_DISUSE_YN = '1' "
+ " , UPDATE_DATE = SYSDATE "
+ " , UPDATER = 'COMM' "
+ " WHERE FARE_OFFICE_ID = ? "
+ " AND YEAR = ? "
+ " AND MONTH = ? "
+ " AND DAY = ? ";
psUpd1 = conn.prepareStatement(query);
query = "UPDATE DAY_FIX_STOCK_INFO "
+ " SET RETURN_COUPON_COUNT = RETURN_COUPON_COUNT + ?"
+ " , K_RET_COUPON_CNT = K_RET_COUPON_CNT + ? "
+ " , UPDATE_DATE = SYSDATE "
+ " , UPDATER = 'COMM' "
+ " WHERE FARE_OFFICE_ID = ? "
+ " AND YEAR = ? "
+ " AND MONTH = ? "
+ " AND DAY = ? ";
psUpd2 = conn.prepareStatement(query);
query = "UPDATE FARE_ADJUST_INFO "
+ " SET COUPON_DISUSE_YN = '1' "
+ " , UPDATE_DATE = SYSDATE "
+ " , UPDATER = 'COMM' "
+ " WHERE FARE_OFFICE_ID = ? "
+ " AND YEAR = ? "
+ " AND MONTH = ? ";
psUpd3 = conn.prepareStatement(query);
query = "UPDATE OVERCOUPON_HEAD_INFO "
+ " SET COUPON_DISUSE_COUNT = OVERCOUPON_COUNT - COUPON_RETURN_COUNT "
+ " , K_COUPON_DISUSE_CNT = K_OVERCOUPON_CNT - K_COUPON_RET_CNT "
+ " , UPDATE_DATE = SYSDATE "
+ " , UPDATER = 'COMM' "
+ " WHERE FARE_OFFICE_ID = ? "
+ " AND YEAR = ? "
+ " AND MONTH = ? ";
psUpd4 = conn.prepareStatement(query);
query = "UPDATE OVERCOUPON_DETAIL_INFO "
+ " SET OVER_KBN = '3' "
+ " , RETURN_DATE = ? "
+ " , RETURN_PERSON = ? "
+ " , UPDATE_DATE = SYSDATE "
+ " , UPDATER = 'COMM' "
+ " WHERE FARE_OFFICE_ID = ? "
+ " AND YEAR = ? "
+ " AND MONTH = ? "
+ " AND OVERFARE_KBN = '1' "
+ " AND DELETE_YN = '0' ";
psUpd5 = conn.prepareStatement(query);
}
catch(Exception ex)
{
logger.logFail( sPrcsName + " initialize fail");
logger.logTrace(ex);
}
}
/**
* finalize
*/
@Override
public void finalize() {
try{ if(psSls != null) psSls.close(); }catch(Exception ignore){}
try{ if(psIns1 != null) psIns1.close(); }catch(Exception ignore){}
try{ if(psIns2 != null) psIns2.close(); }catch(Exception ignore){}
try{ if(psUpd1 != null) psUpd1.close(); }catch(Exception ignore){}
try{ if(psUpd2 != null) psUpd2.close(); }catch(Exception ignore){}
try{ if(psUpd3 != null) psUpd3.close(); }catch(Exception ignore){}
try{ if(psUpd4 != null) psUpd4.close(); }catch(Exception ignore){}
try{ if(psUpd5 != null) psUpd5.close(); }catch(Exception ignore){}
try{ if(inFile != null) inFile.closeFile(); }catch(Exception ignore){}
}
/**
* 데이터 반영
* @param Id
* @throws SQLException
*/
private void processRecord(CpnDisuseDataRecord record) throws SQLException , Exception {
int iParam;
try{
char sPrcsKbn = record.getItem(FixTicketDataRecord.D_DATA_TYPE).charAt(0); // 쿠폰구분
switch (sPrcsKbn) {
case '1': // 쿠폰회수폐기
iParam = 1;
psUpd1.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_OFFICE_ID ).trim()); // '요금소'
psUpd1.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_YEAR ).trim()); // '년도'
psUpd1.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_MONTH ).trim()); // '월'
psUpd1.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_DAY ).trim()); // '일'
psUpd1.executeUpdate();
nUpdateCount++;
iParam = 1;
psSls.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_OFFICE_ID ).trim()); // '요금소'
psSls.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_YEAR ).trim()); // '년도'
psSls.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_MONTH ).trim()); // '월'
psSls.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_DAY ).trim()); // '일'
rs = psSls.executeQuery();
rs.next();
if (rs.getInt(1) == 0) {
iParam = 1;
psIns1.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_OFFICE_ID ).trim()); // '요금소'
psIns1.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_YEAR ).trim()); // '년도'
psIns1.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_MONTH ).trim()); // '월'
psIns1.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_DAY ).trim()); // '일'
psIns1.setString(iParam++, record.getItem( CpnDisuseDataRecord.DISUSE_COUNT ).trim()); // '일반쿠폰폐기매수'
psIns1.setString(iParam++, record.getItem( CpnDisuseDataRecord.K_DISUSE_CNT ).trim()); // '경차쿠폰폐기매수'
psIns1.executeUpdate();
nInsertCount++;
} else if (rs.getInt(1) > 0) {
iParam = 1;
psUpd2.setString(iParam++, record.getItem( CpnDisuseDataRecord.COUPON_COUNT ).trim()); // '일반쿠폰폐기매수'
psUpd2.setString(iParam++, record.getItem( CpnDisuseDataRecord.K_COUPON_CNT ).trim()); // '경차쿠폰폐기매수'
psUpd2.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_OFFICE_ID ).trim()); // '요금소'
psUpd2.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_YEAR ).trim()); // '년도'
psUpd2.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_MONTH ).trim()); // '월'
psUpd2.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_DAY ).trim()); // '일'
psUpd2.executeUpdate();
nUpdateCount++;
}
break;
case '2': // 과잉쿠폰폐기
iParam = 1;
psUpd3.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_OFFICE_ID ).trim()); // '요금소'
psUpd3.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_YEAR ).trim()); // '년도'
psUpd3.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_MONTH ).trim()); // '월'
psUpd3.executeUpdate();
nUpdateCount++;
iParam = 1;
psUpd4.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_OFFICE_ID ).trim()); // '요금소'
psUpd4.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_YEAR ).trim()); // '년도'
psUpd4.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_MONTH ).trim()); // '월'
psUpd4.executeUpdate();
nUpdateCount++;
iParam = 1;
psUpd5.setString(iParam++, record.getItem( CpnDisuseDataRecord.DISUSE_DATE ).trim()); // '폐기일자'
psUpd5.setString(iParam++, record.getItem( CpnDisuseDataRecord.DISUSE_PERSON ).trim()); // '폐기담당자'
psUpd5.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_OFFICE_ID ).trim()); // '요금소'
psUpd5.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_YEAR ).trim()); // '년도'
psUpd5.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_MONTH ).trim()); // '월'
psUpd5.executeUpdate();
nUpdateCount++;
break;
default:
iParam = 1;
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_OFFICE_ID ).trim()); // '요금소'
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.DISUSE_DATE ).trim()); // '폐기일자'
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.DISUSE_SEQNO ).trim()); // '일련번호'
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.COUPON_KBN ).trim()); // '쿠폰구분'
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_YEAR ).trim()); // '년도'
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_MONTH ).trim()); // '월'
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.FARE_DAY ).trim()); // '일'
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.COUPON_COUNT ).trim()); // '쿠폰매수'
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.DISUSE_PERSON ).trim()); // '폐기자'
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.DISUSE_COUNT ).trim()); // '폐기매수'
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.K_COUPON_CNT ).trim()); // '경차쿠폰매수'
psIns2.setString(iParam++, record.getItem( CpnDisuseDataRecord.K_DISUSE_CNT ).trim()); // '경차폐기매수'
psIns2.executeUpdate();
nInsertCount++;
}
}catch(SQLException sqle){
logger.logFail( "[" + record.getRecord() +"]" );
logger.logTrace(sqle);
throw sqle;
}finally{
try{ if(rs != null) rs.close(); }catch(Exception ignore){}
}
}
}