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 }