ecde3a135e56a0aea2ff794f26b529d8bb4f7c44.svn-base 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. package UIJ.UIJ04;
  2. import java.sql.ResultSet;
  3. import java.sql.SQLException;
  4. import java.util.ArrayList;
  5. import CoreFS.SA01.CoreIComponent;
  6. import CoreFS.SA06.CoreReturnObject;
  7. /**
  8. * 发货实绩录入与发行装车明细
  9. *
  10. * @author siy
  11. * @date 2010-9-10
  12. */
  13. public class UIJ040030 extends CoreIComponent {
  14. /**
  15. * 查询发货实绩信息
  16. *
  17. * @param dlivTp
  18. * @param curProgCd
  19. * @param transCarNo
  20. * @param dlivDirNo
  21. * @param shipProgCd
  22. * @param tranfDTime
  23. * @return
  24. * @throws SQLException
  25. */
  26. public CoreReturnObject queryShippingResult(String dlivTp,
  27. String curProgCd, String transCarNo, String dlivDirNo,
  28. String shipProgCd, String tranfDTime) throws SQLException {
  29. CoreReturnObject cro = new CoreReturnObject();
  30. StringBuffer sqlBuffer = new StringBuffer();
  31. sqlBuffer.append("SELECT 'N' AS CHK\n");
  32. sqlBuffer.append(" , A.SHIP_PROG_CD\n");
  33. sqlBuffer.append(" , Z.SM_CFNM AS SHIP_PROG_NM\n");
  34. sqlBuffer.append(" , A.SHIP_DIRNO\n");
  35. sqlBuffer
  36. .append(" ,(select CUST_NM FROM TBZ00_CUSTOMER WHERE CUST_CD = (SELECT CUST_CD FROM TBA01_ORD_COMM WHERE ORD_NO = A.ORD_NO) and REC_TP='01') CUST_NM \n");
  37. sqlBuffer
  38. .append(" ,(select CUST_NM ORD_NM FROM TBZ00_CUSTOMER WHERE CUST_CD = C.ORD_CUST_CD and REC_TP='02') ORD_NM\n");
  39. sqlBuffer
  40. .append(" ,(select SM_CFNM FROM TBZ00_COMMCD WHERE SM_CD = A.ORD_USE_CD and LG_CD = 'A01007') SM_CFNM\n");
  41. sqlBuffer.append(" , A.ORD_USE_CD\n");
  42. sqlBuffer.append(" , A.SPEC_ABBSYM\n");
  43. sqlBuffer.append(" , A.SPEC_STL_GRD\n");
  44. sqlBuffer.append(" , A.DLIV_DIRNO\n");
  45. sqlBuffer.append(" , C.DLIV_TP\n");
  46. sqlBuffer.append(" , C.DLIV_TP_DESC\n");
  47. sqlBuffer.append(" , C.SHIP_COMP_CD\n");
  48. sqlBuffer.append(" , C.SHIP_COMP_NM\n");
  49. sqlBuffer.append(" , C.TRANS_CAR_NO\n");
  50. sqlBuffer.append(" , C.GET_ON_PCD\n");
  51. sqlBuffer.append(" , C.DEST_PCD\n");
  52. sqlBuffer.append(" , C.DEST_PCD_DESC\n");
  53. sqlBuffer.append(" , C.EXLV_LINE_CD\n");
  54. sqlBuffer.append(" , C.EXLV_LINE_CD_DESC\n");
  55. sqlBuffer.append(" , C.GET_OFF_PCD\n");
  56. sqlBuffer.append(" , C.BY_SEA_YN\n");
  57. sqlBuffer.append(" , C.ARRIVAL_CD \n");
  58. sqlBuffer.append(" , C.ARRIVAL_CD_DESC\n");
  59. sqlBuffer.append(" , A.OLD_SAMPL_NO OLD_SAMPL_NO\n");
  60. sqlBuffer.append(" , A.COIL_NO \n");
  61. sqlBuffer.append(" , A.TOT_DEC_GRD \n");
  62. sqlBuffer
  63. .append(" , DECODE(A.TOT_DEC_GRD,'1','合格','2','不合格',null) as TOT_DEC_GRD_DESC\n");
  64. sqlBuffer.append(" , NVL(A.ACT_WGT,0) COIL_WGT\n");
  65. sqlBuffer.append(" , NVL(A.CAL_WGT,0) CAL_WGT\n");
  66. sqlBuffer.append(" , A.COIL_OUTDIA\n");
  67. sqlBuffer.append(" , A.SHIP_INVNO\n");
  68. sqlBuffer.append(" , A.CRET_NO\n");
  69. sqlBuffer
  70. .append(" , NVL(TO_CHAR(TO_DATE(A.TRNF_DTIME,'YYYYMMDDHH24MISS'),'YYYY-MM-DD HH24:MI:SS'),'-') AS TRNF_DTIME\n");
  71. sqlBuffer.append(" ,'3' AS COIL_STAT\n");
  72. sqlBuffer.append(" ,'SFF' AS CUR_PROG_CD\n");
  73. sqlBuffer.append(" ,'UIJ040030' AS CUR_PROG_CD_PGM\n");
  74. sqlBuffer.append(" , A.CUR_PROG_CD AS BEF_PROG_CD\n");
  75. sqlBuffer.append(" , A.CUR_PROG_CD_DTIME AS BEF_PROG_CD_DTIME\n");
  76. sqlBuffer.append(" , A.CUR_PROG_CD_PGM AS BEF_PROG_CD_PGM\n");
  77. sqlBuffer.append(" , A.ORD_NO, A.ORD_SEQ\n");
  78. sqlBuffer.append(" ,A.MATLQLTY_DEC_GRD \n");
  79. sqlBuffer
  80. .append(" , DECODE(A.MATLQLTY_DEC_GRD,'1','合格','2','不合格',null) as MATLQLTY_DEC_GRD_DESC\n");
  81. sqlBuffer.append(" , A.INSTR_COIL_THK||'*'||A.INSTR_COIL_WTH T_W\n");
  82. sqlBuffer.append(" , TO_CHAR(SYSDATE,'YYYY-MM-DD') SYS_TIME\n");
  83. sqlBuffer.append(" , A.CZD_WGT\n");
  84. sqlBuffer
  85. .append(" , DECODE(A.TRNF_SHIFT,'1','早','2','中','3','晚') TRNF_SHIFT\n");
  86. sqlBuffer
  87. .append(" , DECODE(A.TRNF_GROUP,'A','甲','B','乙','C','丙','D','丁') TRNF_GROUP\n");
  88. sqlBuffer.append(" , A.TRNF_USE_TIME\n");
  89. sqlBuffer.append(" ,A.HCOLOUR_REM\n");
  90. sqlBuffer.append(" ,A.SLAB_NO --板加添加,以下相同\n");
  91. sqlBuffer
  92. .append(" ,(SELECT T.DEL_TO_DATE FROM TBE02_ORD_PRC T WHERE T.ORD_NO = A.ORD_NO AND T.ORD_SEQ = A.ORD_SEQ) DEVLMT_DTIME\n");
  93. sqlBuffer.append(" ,A.INSTR_COIL_THK\n");
  94. sqlBuffer.append(" ,A.INSTR_COIL_WTH\n");
  95. sqlBuffer.append(" ,A.INSTR_COIL_LEN\n");
  96. sqlBuffer.append(" ,A.INSTR_COIL_OUTDIA\n");
  97. sqlBuffer.append(" ,A.INSTR_COIL_INDIA\n");
  98. sqlBuffer.append(" ,A.INSTR_COIL_WGT\n");
  99. sqlBuffer.append(" ,C.SM_CD\n");
  100. sqlBuffer
  101. .append(" ,(select CUST_CD ORD_CD FROM TBZ00_CUSTOMER WHERE CUST_CD = C.ORD_CUST_CD and REC_TP='02') ORD_CD \n");
  102. sqlBuffer.append(" ,A.COIL_LEN\n");
  103. sqlBuffer.append(" ,A.COIL_INDIA\n");
  104. sqlBuffer.append(" ,A.COIL_THK\n");
  105. sqlBuffer.append(" ,A.COIL_WTH\n");
  106. sqlBuffer.append(" ,A.PRODNM_CD\n");
  107. sqlBuffer.append(" ,A.INGR_DEC_DTIME --成份判定\n");
  108. sqlBuffer.append(" ,A.MATLQLTY_DEC_DTIME --材质判定\n");
  109. sqlBuffer.append(" ,A.EXTSHAPE_DEC_DTIME --外观判定\n");
  110. sqlBuffer.append(" ,A.TOT_DEC_DTIME --综合判定时间\n");
  111. sqlBuffer.append(" ,A.INGR_DEC_GRD\n");
  112. sqlBuffer.append(" ,A.SIZE_DEC_RST\n");
  113. sqlBuffer.append(" ,A.EXTSHAPE_DEC_GRD\n");
  114. sqlBuffer.append(" ,A.WGT_DEC_RST\n");
  115. sqlBuffer.append(" ,A.MILL_DTIME\n");
  116. sqlBuffer.append(" ,A.CRK_CD1\n");
  117. sqlBuffer.append(" ,A.CRK_CD2\n");
  118. sqlBuffer.append(" ,A.CRK_CD3\n");
  119. sqlBuffer.append(" ,A.CRK_CD4\n");
  120. sqlBuffer.append(" ,A.CRK_CD5\n");
  121. sqlBuffer.append(" FROM TBH02_COIL_COMM A\n");
  122. sqlBuffer.append(" , TBJ01_SHIP_DIR B\n");
  123. sqlBuffer
  124. .append(" ,(SELECT X.*, Y.SHIP_COMP_NM, Z.SM_CFNM AS DLIV_TP_DESC\n");
  125. sqlBuffer.append(" , Z1.SM_CFNM AS DEST_PCD_DESC\n");
  126. sqlBuffer.append(" , Z2.SM_CFNM AS EXLV_LINE_CD_DESC\n");
  127. sqlBuffer.append(" , Z3.SM_CFNM AS ARRIVAL_CD_DESC\n");
  128. sqlBuffer.append(" , Z1.SM_CD --板加 目的地代码\n");
  129. sqlBuffer.append(" FROM TBJ01_DLIV_DIR X\n");
  130. sqlBuffer.append(" , TBJ00_SHIP_COMP Y\n");
  131. sqlBuffer
  132. .append(" ,(SELECT * FROM TBZ00_COMMCD WHERE LG_CD = 'A01012') Z\n");
  133. sqlBuffer
  134. .append(" ,(SELECT * FROM TBZ00_COMMCD WHERE LG_CD = 'A01009') Z1\n");
  135. sqlBuffer
  136. .append(" ,(SELECT * FROM TBZ00_COMMCD WHERE LG_CD = 'A01015') Z2 \n");
  137. sqlBuffer
  138. .append(" ,(SELECT * FROM TBZ00_COMMCD WHERE LG_CD = 'A01009') Z3\n");
  139. sqlBuffer.append(" WHERE 1 = 1\n");
  140. sqlBuffer.append(" AND X.SHIP_COMP_CD = Y.SHIP_COMP_CD(+)\n");
  141. sqlBuffer.append(" AND X.DLIV_TP = Z.SM_CD(+)\n");
  142. sqlBuffer.append(" AND X.DEST_PCD = Z1.SM_CD(+)\n");
  143. sqlBuffer.append(" AND X.EXLV_LINE_CD = Z2.SM_CD(+)\n");
  144. sqlBuffer.append(" AND X.ARRIVAL_CD = Z3.SM_CD(+)\n");
  145. sqlBuffer.append(" AND X.DLIV_TP LIKE ?||'%') C\n");
  146. sqlBuffer
  147. .append(" ,(SELECT * FROM TBZ00_COMMCD WHERE LG_CD = 'J01005' AND SM_CD IN ('05','06','07','08','09')) Z\n");
  148. sqlBuffer.append(" WHERE 1 = 1\n");
  149. sqlBuffer.append(" AND A.SHIP_DIRNO = B.SHIP_DIRNO\n");
  150. sqlBuffer.append(" AND A.DLIV_DIRNO = C.DLIV_DIRNO\n");
  151. sqlBuffer.append(" AND A.SHIP_PROG_CD = Z.SM_CD(+)\n");
  152. sqlBuffer.append(" AND A.SHIP_PROG_CD IN ('06','07','08')\n");
  153. sqlBuffer.append(" AND A.CUR_PROG_CD LIKE ?||'%'\n");
  154. sqlBuffer.append(" AND A.TRANS_CAR_NO||'&' LIKE ?||'%'\n");
  155. sqlBuffer.append(" AND A.DLIV_DIRNO LIKE ?||'%'\n");
  156. sqlBuffer.append(" AND A.SHIP_PROG_CD LIKE ?||'%'\n");
  157. sqlBuffer.append(" AND A.TRNF_DTIME||'&' LIKE ?||'%'\n");
  158. sqlBuffer.append(" ORDER BY A.SHIP_DIRNO, A.DLIV_DIRNO\n");
  159. cro = this.getDao("KgDao").ExcuteQuery(
  160. sqlBuffer.toString(),
  161. new Object[] { dlivTp, curProgCd, transCarNo, dlivDirNo,
  162. shipProgCd, tranfDTime });
  163. System.out.println(cro);
  164. return cro;
  165. }
  166. /**
  167. * 生成发货实绩
  168. *
  169. * @param trnfShift
  170. * @param trnfGroup
  171. * @param trnfRegId
  172. * @param trnfDTime
  173. * @param czdWgt
  174. * @param params
  175. * @return
  176. * @throws SQLException
  177. */
  178. public CoreReturnObject saveShippingResult(String trnfShift,
  179. String trnfGroup, String trnfRegId, String trnfDTime,
  180. String czdWgt, ArrayList<String[]> params) throws SQLException {
  181. CoreReturnObject cro = new CoreReturnObject();
  182. // 修改钢卷发运状态
  183. updateCoilProgStatus(trnfShift, trnfGroup, trnfRegId, trnfDTime, params);
  184. // 调用进程管理进程整理
  185. // 修改钢卷表发运状态及发运相关信息 、发运表发运状态
  186. updateShipProgStatus(czdWgt, params);
  187. return cro;
  188. }
  189. /**
  190. * 修改钢卷发运状态
  191. *
  192. * @param trnfShift
  193. * @param trnfGroup
  194. * @param trnfRegId
  195. * @param trnfDTime
  196. * @param params
  197. * @return
  198. * @throws SQLException
  199. */
  200. private void updateCoilProgStatus(String trnfShift, String trnfGroup,
  201. String trnfRegId, String trnfDTime, ArrayList<String[]> params)
  202. throws SQLException {
  203. for (int i = 0; i < params.size(); i++) {
  204. String[] param = params.get(i);
  205. // 更新钢卷公共表发货状态
  206. StringBuffer updSql1 = new StringBuffer();
  207. updSql1.append("UPDATE TBH02_COIL_COMM\n");
  208. updSql1.append(" SET COIL_STAT = ?\n");
  209. updSql1.append(" , CUR_PROG_CD = ?\n");
  210. updSql1
  211. .append(" , CUR_PROG_CD_DTIME = TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS')\n");
  212. updSql1.append(" , CUR_PROG_CD_PGM = ?\n");
  213. updSql1.append(" , BEF_PROG_CD = ?\n");
  214. updSql1.append(" , BEF_PROG_CD_DTIME = ?\n");
  215. updSql1.append(" , BEF_PROG_CD_PGM = ?\n");
  216. updSql1.append(" , TRANS_CAR_NO = ?\n");
  217. updSql1.append(" , TRNF_SHIFT = ?\n");
  218. updSql1.append(" , TRNF_GROUP = ?\n");
  219. updSql1.append(" , TRNF_REG = ?\n");
  220. updSql1.append(" , TRNF_DTIME = ?\n");
  221. updSql1.append(" --记录修改前重量\n");
  222. updSql1.append(" , BEF_ACT_WGT = ACT_WGT\n");
  223. updSql1.append(" , ACT_WGT = ?\n");
  224. updSql1
  225. .append(" , TRNF_USE_TIME = TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS')\n");
  226. updSql1.append(" WHERE COIL_NO = ?\n");
  227. this.getDao("KgDao").ExcuteNonQuery(
  228. updSql1.toString(),
  229. new Object[] { param[25], param[26], param[27], param[19],
  230. param[20], param[21], param[2], trnfShift,
  231. trnfGroup, trnfRegId, trnfDTime, param[12],
  232. param[10] });
  233. // 更新发运表车辆号
  234. StringBuffer updSql2 = new StringBuffer();
  235. updSql2.append("UPDATE tbj01_dliv_dir\n");
  236. updSql2.append(" SET TRANS_CAR_NO = ?\n");
  237. updSql2.append(" WHERE DLIV_DIRNO = ?\n");
  238. this.getDao("KgDao").ExcuteNonQuery(updSql2.toString(),
  239. new Object[] { param[2], param[1] });
  240. }
  241. }
  242. /**
  243. * 修改钢卷表发运状态及发运相关信息
  244. *
  245. * @param czdWgt
  246. * @param params
  247. * @throws SQLException
  248. */
  249. private void updateShipProgStatus(String czdWgt, ArrayList<String[]> params)
  250. throws SQLException {
  251. for (int i = 0; i < params.size(); i++) {
  252. String[] param = params.get(i);
  253. // 更新钢卷公共表发运状态及发运相关信息
  254. StringBuffer sqlBuffer = new StringBuffer();
  255. sqlBuffer.append("UPDATE TBH02_COIL_COMM\n");
  256. sqlBuffer.append(" SET SHIP_PROG_CD = ?\n");
  257. sqlBuffer.append(" ,TRANS_CAR_NO = ?\n");
  258. sqlBuffer.append(" ,ACT_WGT = ?\n");
  259. sqlBuffer.append(" ,CZD_WGT = ? \n");
  260. sqlBuffer.append(" WHERE COIL_NO = ?\n");
  261. this.getDao("KgDao").ExcuteNonQuery(
  262. sqlBuffer.toString(),
  263. new Object[] { param[17], param[2], param[12], czdWgt,
  264. param[10] });
  265. }
  266. for (int i = 0; i < params.size(); i++) {
  267. String[] param = params.get(i);
  268. // 查询钢卷公共表中SHIP_PROG_CD状态,看是否全部改变
  269. boolean flag = true;
  270. String sql = "select a.SHIP_PROG_CD from tbh02_coil_comm a where a.ship_dirno = '"
  271. + param[0] + "' ";
  272. ResultSet rs = this.getDao("KgDao").ExceuteQueryForResultSet(sql);
  273. while (rs.next()) {
  274. String shipProgCd = rs.getString("SHIP_PROG_CD");
  275. if (!"07".equals(shipProgCd) && !"08".equals(shipProgCd)
  276. && !"09".equals(shipProgCd)) {
  277. flag = false;
  278. }
  279. }
  280. // 判断同一发货指示下的钢卷是否全部保存,如果没有的话不能改变发货指示的状态
  281. if (flag) {
  282. StringBuffer sqlBuffer = new StringBuffer();
  283. sqlBuffer.append("UPDATE TBJ01_SHIP_DIR\n");
  284. sqlBuffer.append(" SET SHIP_PROG_CD = ?\n");
  285. sqlBuffer.append(" WHERE SHIP_DIRNO = ?\n");
  286. this.getDao("KgDao").ExcuteNonQuery(sqlBuffer.toString(),
  287. new Object[] { param[17], param[0] });
  288. }
  289. }
  290. }
  291. /**
  292. * 打印发货明细后修改相关状态
  293. *
  294. * @param trnfShift
  295. * @param trnfGroup
  296. * @param trnfRegId
  297. * @param trnfDTime
  298. * @param czdWgt
  299. * @param params
  300. * @return
  301. * @throws SQLException
  302. */
  303. public CoreReturnObject printShippingResult(String trnfShift,
  304. String trnfGroup, String trnfRegId, String trnfDTime,
  305. String czdWgt, ArrayList<String[]> params) throws SQLException {
  306. CoreReturnObject cro = new CoreReturnObject();
  307. updateInvoiceInfoOfDelivery(params);
  308. // 修改钢卷表发运状态及发运相关信息 、发运表发运状态
  309. updateShipProgStatus(czdWgt, params);
  310. updateShipProgStatusOfPrint(czdWgt, params);
  311. return cro;
  312. }
  313. private void updateInvoiceInfoOfDelivery(ArrayList<String[]> params) throws SQLException{
  314. StringBuffer sqlBuffer = new StringBuffer();
  315. sqlBuffer.append("UPDATE TBJ01_DLIV_DIR\n");
  316. sqlBuffer.append(" SET TRANS_CAR_NO = ?\n");
  317. sqlBuffer.append(" , INV_PRNCNT = NVL(INV_PRNCNT,0) + 1\n");
  318. sqlBuffer.append(" WHERE DLIV_DIRNO = ?\n");
  319. String dlivDirNo = "";
  320. for (int i = 0; i < params.size(); i++) {
  321. String[] param = params.get(i);
  322. if (i > 0) {
  323. if (dlivDirNo.equals(param[1])) {
  324. continue;
  325. } else {
  326. this.getDao("KgDao").ExcuteNonQuery(sqlBuffer.toString(),
  327. new Object[] { param[2], param[1] });
  328. }
  329. } else {
  330. this.getDao("KgDao").ExcuteNonQuery(sqlBuffer.toString(),
  331. new Object[] { param[2], param[1] });
  332. }
  333. dlivDirNo = param[1];
  334. }
  335. }
  336. /**
  337. * 修改钢卷表发运状态及发运相关信息
  338. *
  339. * @param czdWgt
  340. * @param params
  341. * @throws SQLException
  342. */
  343. private void updateShipProgStatusOfPrint(String czdWgt, ArrayList<String[]> params)
  344. throws SQLException {
  345. for (int i = 0; i < params.size(); i++) {
  346. String[] param = params.get(i);
  347. // 更新钢卷公共表发运状态及发运相关信息
  348. StringBuffer sqlBuffer = new StringBuffer();
  349. sqlBuffer.append("UPDATE TBH02_COIL_COMM\n");
  350. sqlBuffer.append(" SET SHIP_PROG_CD = ?\n");
  351. sqlBuffer.append(" ,TRANS_CAR_NO = ?\n");
  352. sqlBuffer.append(" ,ACT_WGT = ?\n");
  353. sqlBuffer.append(" ,CZD_WGT = ? \n");
  354. sqlBuffer.append(" WHERE COIL_NO = ?\n");
  355. this.getDao("KgDao").ExcuteNonQuery(
  356. sqlBuffer.toString(),
  357. new Object[] { param[17], param[2], param[12], czdWgt,
  358. param[10] });
  359. }
  360. for (int i = 0; i < params.size(); i++) {
  361. String[] param = params.get(i);
  362. // 查询钢卷公共表中SHIP_PROG_CD状态,看是否全部改变
  363. boolean flag = true;
  364. String sql = "select a.SHIP_PROG_CD from tbh02_coil_comm a where a.ship_dirno = '"
  365. + param[0] + "' ";
  366. ResultSet rs = this.getDao("KgDao").ExceuteQueryForResultSet(sql);
  367. while (rs.next()) {
  368. String shipProgCd = rs.getString("SHIP_PROG_CD");
  369. if (!"08".equals(shipProgCd)
  370. && !"09".equals(shipProgCd)) {
  371. flag = false;
  372. }
  373. }
  374. // 判断同一发货指示下的钢卷是否全部保存,如果没有的话不能改变发货指示的状态
  375. if (flag) {
  376. StringBuffer sqlBuffer = new StringBuffer();
  377. sqlBuffer.append("UPDATE TBJ01_SHIP_DIR\n");
  378. sqlBuffer.append(" SET SHIP_PROG_CD = ?\n");
  379. sqlBuffer.append(" WHERE SHIP_DIRNO = ?\n");
  380. this.getDao("KgDao").ExcuteNonQuery(sqlBuffer.toString(),
  381. new Object[] { param[17], param[0] });
  382. }
  383. }
  384. }
  385. }