001 /* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016 package org.opengion.fukurou.transfer; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 021 import org.opengion.fukurou.db.DBUtil; 022 import org.opengion.fukurou.db.Transaction; 023 import org.opengion.fukurou.util.ApplicationInfo; 024 import org.opengion.fukurou.util.StringUtil; 025 026 /** 027 * ä¼é?è¦æ±‚ã«å¯¾ã—ã¦ã€æ—§ä¼é?DBã®ãƒ??ã‚¿ã‚’èªå–ã—ã¾ã™ã? 028 * 029 * ä¼é?定義マスタã®èªå–対象ã¯ã€ä»¥ä¸‹ã?å½¢å¼ã§å®šç¾©ã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã? 030 * (ãƒ??タコーãƒ? (é€ã‚Šå…? (ãƒ?‚スト種別) ä¾?:"3 D9 B119" 031 * 処ç?®Ÿè¡Œå¾Œã?ã€èªã¿å–ã£ãŸã?ãƒ?ƒ€ãƒ¼ãƒ??ã‚¿ã®çжæ³ã‚’'2'ã«æ›´æ–°ã—ã¾ã™ã? 032 * ä½?—ã€èªå–パラメーターã«"NOUPDATE"を指定ã—ãŸå?åˆã?処ç?¾Œã?æ›´æ–°ã¯è¡Œã‚れã¾ã›ã‚“ã€? 033 * ã¾ãŸã?エラーãŒç™ºç”Ÿã—ãŸå?åˆã?ヘッãƒ??ãƒ??ã‚¿ã®çжæ³ã‚’'9'ã«æ›´æ–°ã—ã¾ã™ã? 034 * 035 * @og.group ä¼é?シスãƒ?ƒ 036 * 037 * @version 5.0 038 * @author Hiroki.Nakamura 039 * @since JDK1.6 040 */ 041 public class TransferRead_CB01 implements TransferRead { 042 043 // 更新対象ã®é€šç•ªNO(é…å?) 044 private String[] htcnoArr = null; 045 046 /** 047 * ä¼é?ãƒ??ã‚¿ã‚’èªã¿å–りã¾ã™ã? 048 * 049 * @param config ä¼é?è¨å®šã‚ªãƒ–ジェクãƒ? 050 * @param tran トランザクションオブジェクãƒ? 051 * 052 * @return èªã¿å–りã—ãŸãƒ??ã‚¿(é…å?) 053 * @see #getKeys() 054 */ 055 @Override 056 public String[] read( final TransferConfig config, final Transaction tran ) { 057 htcnoArr = getHtcno( config, tran ); 058 return getData( htcnoArr, tran ); 059 } 060 061 /** 062 * æ—§ä¼é?DBを検索ã—ã?対象ã®é€šç•ªNO(é…å?)ã‚’è¿”ã—ã¾ã™ã? 063 * 064 * @param config ä¼é?è¨å®šã‚ªãƒ–ジェクãƒ? 065 * @param tran トランザクションオブジェクãƒ? 066 * 067 * @return 通番NO(é…å?) 068 */ 069 private String[] getHtcno( final TransferConfig config, final Transaction tran ) { 070 String readObj = config.getReadObj(); 071 String[] obj = StringUtil.csv2Array( readObj, ' ' ); 072 if( obj.length < 3 ) { 073 String errMsg = "èªå–対象ã¯ã€?ãƒ??タコーãƒ? (é€ã‚Šå…? (ãƒ?‚スト種別) ã®å½¢å¼ã§æŒ?®šã—ã¦ä¸‹ã•ã??[READOBJ=" + readObj + "]"; 074 throw new RuntimeException( errMsg ); 075 } 076 String hcdd = obj[0]; 077 String hto = obj[1]; 078 String hsyu = obj[2]; 079 if( hcdd == null || hcdd.length() == 0 080 || hto == null || hto.length() == 0 081 || hsyu == null || hsyu.length() == 0 ) { 082 String errMsg = "èªå–対象ã¯ã€?ãƒ??タコーãƒ? (é€ã‚Šå…? (ãƒ?‚スト種別) ã¯å¿??ã§ã™ã?[READOBJ=" + readObj + "]"; 083 throw new RuntimeException( errMsg ); 084 } 085 086 StringBuilder buf = new StringBuilder(); 087 buf.append( "SELECT A.HTCNO" ); 088 buf.append( " FROM CB01 A" ); 089 buf.append( " WHERE A.HCDD = '" + hcdd + "'" ); 090 buf.append( " AND A.HTO = '" + hto + "'" ); 091 buf.append( " AND A.HSYU = '" + hsyu + "'" ); 092 buf.append( " AND A.HCDJ = '1'" ); 093 buf.append( " ORDER BY A.HTC" ); 094 095 String[][] vals = DBUtil.dbExecute( buf.toString(),null,tran ); 096 List<String> hnoList = new ArrayList<String>(); 097 if( vals != null && vals.length > 0 ) { 098 for( int row=0; row<vals.length; row++ ) { 099 hnoList.add( vals[row][0] ); 100 } 101 } 102 103 // return hnoList.toArray( new String[0] ); 104 return hnoList.toArray( new String[hnoList.size()] ); 105 } 106 107 /** 108 * 対象ã®é€šç•ªNOã«å¯¾ã—ã¦CB01ã‚’èªã¿è¾¼ã¿ãƒ??ã‚¿ã‚’é?列ã§è¿”ã—ã¾ã™ã? 109 * 110 * @param htcnoArr èªå–対象ã®é€šç•ªNO(é…å?) 111 * @param tran トランザクション 112 * 113 * @return ãƒ??ã‚¿(é…å?) 114 */ 115 private String[] getData( final String[] htcnoArr, final Transaction tran ) { 116 if( htcnoArr == null || htcnoArr.length == 0 ) { return new String[0]; } 117 118 String htcnos = StringUtil.array2csv( htcnoArr ); 119 StringBuilder buf = new StringBuilder(); 120 buf.append( "SELECT A.HTEXT" ); 121 buf.append( " FROM CB01 A" ); 122 buf.append( " WHERE A.HCDJ = '5'" ); 123 buf.append( " AND A.HTCNO IN (" ); 124 buf.append( htcnos ); 125 buf.append( ") ORDER BY A.HTC, A.HTCNO" ); 126 127 String[][] vals = DBUtil.dbExecute( buf.toString(),null,tran ); 128 String[] rtn = new String[vals.length]; 129 for( int i=0; i<vals.length; i++ ) { 130 rtn[i] = vals[i][0]; 131 } 132 return rtn; 133 } 134 135 /** 136 * 更新対象ã®é€šç•ªNO(é…å?)ã‚’è¿”ã—ã¾ã™ã? 137 * 138 * @og.rev 5.5.2.4 (2012/05/16) é…å?ã‚’è¿”ã™å ´åˆã?ã€å?部表ç¾ã‚’暴露ã—ãªã?‚ˆã?«ã€clone ã‚’è¿”ã—ã¾ã™ã? 139 * 140 * @return 通番NO(é…å?) 141 */ 142 @Override 143 public String[] getKeys() { 144 // return htcnoArr; 145 String[] rtn = null ; 146 if( htcnoArr != null ) { rtn = htcnoArr.clone(); } 147 return rtn ; 148 } 149 150 /** 151 * 更新対象ã®é€šç•ªNO(é…å?)ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã? 152 * 153 * @og.rev 5.5.2.4 (2012/05/16) å‚ç?ã®æ ¼ç´ã«ã¯ã€System.arraycopy を使ã?¾ã™ã? 154 * 155 * @param keys 通番NO(é…å?) 156 */ 157 @Override 158 public void setKeys( final String[] keys ) { 159 // htcnoArr = keys; 160 if( keys != null ) { 161 int size = keys.length ; 162 htcnoArr = new String[size]; 163 System.arraycopy( keys,0,htcnoArr,0,size ); 164 } 165 else { 166 htcnoArr = null; 167 } 168 } 169 170 /** 171 * èªå–ã—ãŸä¼é?ãƒ??ã‚¿ã®ãƒ˜ãƒƒãƒ??ãƒ??ã‚¿ã®çжæ³ã‚’'2'(抜å?済ã¿)ã«æ›´æ–°ã—ã¾ã™ã? 172 * 更新対象ã®é€šç•ªNOã«ã¤ã?¦ã¯ã€{@link #setKeys(String[])}ã§å¤–部ã‹ã‚‰ã‚»ãƒ?ƒˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã? 173 * 174 * @param config ä¼é?è¨å®šã‚ªãƒ–ジェクãƒ? 175 * @param tran トランザクションオブジェクãƒ? 176 * @see #setKeys(String[]) 177 */ 178 @Override 179 public void complete( final TransferConfig config, final Transaction tran ) { 180 if( htcnoArr == null || htcnoArr.length == 0 ) { return; } 181 // èªå–パラメーターã«"NOUPDATE"ãŒæŒ‡å®šã•れã¦ã?‚‹å ´åˆã?ã€CB01ã®çжæ³ã‚’æ›´æ–°ã—ãªã? 182 if( "NOUPDATE".equalsIgnoreCase( config.getReadPrm() ) ) { return; } 183 184 String htcnos = StringUtil.array2csv( htcnoArr ); 185 StringBuilder buf = new StringBuilder(); 186 buf.append( "UPDATE CB01 A" ); 187 buf.append( " SET A.HCDJ = '2'" ); 188 buf.append( " WHERE A.HCDJ = '1'" ); 189 buf.append( " AND A.HTCNO IN (" ); 190 buf.append( htcnos ); 191 buf.append( ")" ); 192 193 DBUtil.dbExecute( buf.toString(),null,tran ); 194 } 195 196 /** 197 * èªå–ã—ãŸä¼é?ãƒ??ã‚¿ã®ãƒ˜ãƒƒãƒ??ãƒ??ã‚¿ã®çжæ³ã‚’'9'(エラー)ã«æ›´æ–°ã—ã¾ã™ã? 198 * 更新対象ã®é€šç•ªNOã«ã¤ã?¦ã¯ã€{@link #setKeys(String[])}ã§å¤–部ã‹ã‚‰ã‚»ãƒ?ƒˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã? 199 * 200 * @param config ä¼é?è¨å®šã‚ªãƒ–ジェクãƒ? 201 * @param appInfo DBæŽ¥ç¶šæƒ…å ± 202 * @see #setKeys(String[]) 203 */ 204 @Override 205 public void error( final TransferConfig config, final ApplicationInfo appInfo ) { 206 if( htcnoArr == null || htcnoArr.length == 0 ) { return; } 207 208 String htcnos = StringUtil.array2csv( htcnoArr ); 209 StringBuilder buf = new StringBuilder(); 210 buf.append( "UPDATE CB01 A" ); 211 buf.append( " SET A.HCDJ = '9'" ); 212 buf.append( " WHERE A.HCDJ in ('1','2')" ); // æ—¢ã«å®Ÿè¡ŒPGã§æŠœå?済ã¿ã«æ›´æ–°ã•れã¦ã?‚‹å¯èƒ½æ€§ãŒã‚ã‚? 213 buf.append( " AND A.HTCNO IN (" ); 214 buf.append( htcnos ); 215 buf.append( ")" ); 216 217 DBUtil.dbExecute( buf.toString(),null,appInfo ); // エラー更新ã¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’å?ã‘ã¦å‡¦ç?™ã‚? 218 } 219 220 }