9c3f3fbcb117a7f5f50ad6ce01760767a1108ef3.svn-base 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543
  1. package UIJ.UIJ06;
  2. import java.sql.CallableStatement;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7. import java.util.ArrayList;
  8. import java.util.Date;
  9. import java.util.Map;
  10. import java.sql.Connection;
  11. import java.text.SimpleDateFormat;
  12. import org.apache.commons.lang.StringUtils;
  13. import UIB.COM.XmlSqlParsersFactory;
  14. import CoreFS.SA01.CoreIComponent;
  15. import CoreFS.SA06.CoreReturnObject;
  16. /**
  17. * 发货实绩录入与发行装车明细
  18. *
  19. * @author zsx
  20. * @date 2017-8-4
  21. */
  22. public class UIJ060020 extends CoreIComponent {
  23. /**
  24. * 查询发货实绩信息
  25. *
  26. * @param dlivTp
  27. * @param curProgCd
  28. * @param transCarNo
  29. * @param dlivDirNo
  30. * @param shipProgCd
  31. * @param tranfDTime
  32. * @return
  33. * @throws SQLException
  34. */
  35. public CoreReturnObject queryShippingResult(String dlivTp,
  36. String curProgCd, String transCarNo, String dlivDirNo,
  37. String shipProgCd, String tranfDTime) throws SQLException {
  38. CoreReturnObject cro = new CoreReturnObject();
  39. String sql = XmlSqlParsersFactory.getSql("UIJ060020_01.SELECT");
  40. cro = this.getDao("KgDao").ExcuteQuery(
  41. sql,
  42. new Object[] { dlivTp, curProgCd, transCarNo, dlivDirNo,
  43. shipProgCd, tranfDTime });
  44. System.out.println(cro);
  45. return cro;
  46. }
  47. /**
  48. * 生成发货实绩
  49. *
  50. * @param trnfShift
  51. * @param trnfGroup
  52. * @param trnfRegId
  53. * @param trnfDTime
  54. * @param czdWgt
  55. * @param params
  56. * @return
  57. * @throws SQLException
  58. */
  59. public CoreReturnObject saveShippingResult(String trnfShift,
  60. String trnfGroup, String trnfRegId, String trnfDTime,
  61. String czdWgt, ArrayList<String[]> params) throws SQLException {
  62. CoreReturnObject cro = new CoreReturnObject();
  63. Connection conn = null;
  64. Statement sta = null;
  65. ArrayList<String> list=new ArrayList<String>();
  66. try {
  67. conn = this.getDao("KgDao").getConnection();
  68. conn.setAutoCommit(false);
  69. // 修改钢卷发运状态
  70. updateCoilProgStatus(conn,trnfShift, trnfGroup, trnfRegId, trnfDTime,
  71. params);
  72. // 修改钢卷表发运状态及发运相关信息 、发运表发运状态
  73. updateShipProgStatus(conn,czdWgt, params);
  74. conn.commit();
  75. } catch (Exception ex) {
  76. if(conn != null){
  77. conn.rollback();
  78. }
  79. cro.setV_errCode(-1);
  80. cro.setV_errMsg("发运明细生成失败!");
  81. } finally{
  82. if(conn != null && !conn.isClosed()){
  83. conn.close();
  84. }
  85. }
  86. return cro;
  87. }
  88. /**
  89. * 修改钢卷发运状态
  90. *
  91. * @param trnfShift
  92. * @param trnfGroup
  93. * @param trnfRegId
  94. * @param trnfDTime
  95. * @param params
  96. * @return
  97. * @throws SQLException
  98. */
  99. private void updateCoilProgStatus(Connection conn,String trnfShift, String trnfGroup,
  100. String trnfRegId, String trnfDTime, ArrayList<String[]> params)
  101. throws SQLException {
  102. PreparedStatement pSta = null;
  103. PreparedStatement pSta1 = null;
  104. String trnftime ;
  105. Date d = new Date();
  106. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
  107. trnftime = sdf.format(d);
  108. for (int i = 0; i < params.size(); i++) {
  109. String[] param = params.get(i);
  110. // 更新钢卷公共表发货状态
  111. String sql1 = XmlSqlParsersFactory.getSql("UIJ060020_01.UPDATE");
  112. pSta = conn.prepareStatement(sql1);
  113. pSta.setString(1, param[25]);
  114. pSta.setString(2, param[26]);
  115. pSta.setString(3, param[27]);
  116. pSta.setString(4, param[19]);
  117. pSta.setString(5, param[20]);
  118. pSta.setString(6, param[21]);
  119. pSta.setString(7, param[2]);
  120. pSta.setString(8, trnfShift);
  121. pSta.setString(9, trnfGroup);
  122. pSta.setString(10, trnfRegId);
  123. pSta.setString(11, trnfDTime);
  124. pSta.setString(12, param[10]);
  125. pSta.executeUpdate();
  126. pSta.close();
  127. //保持同一车号下面操作时间一致 20190411 wl
  128. String sql3 = XmlSqlParsersFactory.getSql("UIJ030030_time.UPDATE");
  129. pSta1 = conn.prepareStatement(sql3);
  130. pSta1.setString(1, trnftime);
  131. pSta1.setString(2, param[1]);
  132. pSta1.executeUpdate();
  133. //conn.commit();
  134. pSta1.close();
  135. // 更新发运表车辆号
  136. String sql2 = XmlSqlParsersFactory.getSql("UIJ060020_02.UPDATE");
  137. pSta = conn.prepareStatement(sql2);
  138. pSta.setString(1, param[2]);
  139. pSta.setString(2, param[1]);
  140. pSta.executeUpdate();
  141. pSta.close();
  142. }
  143. }
  144. /**
  145. * 修改钢卷表发运状态及发运相关信息
  146. *
  147. * @param czdWgt
  148. * @param params
  149. * @throws SQLException
  150. */
  151. private void updateShipProgStatus(Connection conn,String czdWgt,ArrayList<String[]> params)
  152. throws SQLException {
  153. PreparedStatement pSta = null;
  154. Statement sta = null;
  155. for (int i = 0; i < params.size(); i++) {
  156. String[] param = params.get(i);
  157. // 更新钢卷公共表发运状态及发运相关信息
  158. String sql1 = XmlSqlParsersFactory.getSql("UIJ060020_03.UPDATE");
  159. pSta = conn.prepareStatement(sql1);
  160. pSta.setString(1, param[17]);
  161. pSta.setString(2, param[2]);
  162. pSta.setString(3, czdWgt);
  163. pSta.setString(4, param[10]);
  164. pSta.executeUpdate();
  165. pSta.close();
  166. }
  167. for (int i = 0; i < params.size(); i++) {
  168. String[] param = params.get(i);
  169. // 查询钢卷公共表中SHIP_PROG_CD状态,看是否全部改变
  170. boolean flag = true;
  171. String sql2 = "select a.SHIP_PROG_CD from C_TBL02_COIL_COMM a where a.ship_dirno = '"
  172. + param[0] + "' ";
  173. sta = conn.createStatement();
  174. ResultSet rs = sta.executeQuery(sql2);
  175. while (rs.next()) {
  176. String shipProgCd = rs.getString("SHIP_PROG_CD");
  177. //&& !"09".equals(shipProgCd)
  178. if (!"07".equals(shipProgCd) && !"08".equals(shipProgCd)
  179. ) {
  180. flag = false;
  181. }
  182. }
  183. rs.close();
  184. sta.close();
  185. // 判断同一发货指示下的钢卷是否全部保存,如果没有的话不能改变发货指示的状态
  186. if (flag) {
  187. String sql3 = XmlSqlParsersFactory.getSql("UIJ060020_04.UPDATE");
  188. pSta = conn.prepareStatement(sql3);
  189. pSta.setString(1, param[17]);
  190. pSta.setString(2, param[0]);
  191. pSta.executeUpdate();
  192. pSta.close();
  193. }
  194. }
  195. }
  196. /**
  197. * 保存发货明细状态的同时把钢卷数据保存到货运中国中间表去
  198. * @param params
  199. */
  200. public void saveCargocnData(ArrayList<String[]> params,String czdWgt,String trnfDTime,ArrayList<String> list) {
  201. try {
  202. for (int i = 0; i < params.size(); i++) {
  203. String[] param = params.get(i);
  204. String sql3 = XmlSqlParsersFactory.getSql("UIJ060020_cargocn.select");
  205. String flat="1";
  206. ArrayList coilList = (ArrayList) this.getDao("KgDao").ExcuteQueryReturnList(sql3,new Object[]{param[31]});
  207. //若表中存在该钢卷则删除
  208. if(null != coilList && 0 != coilList.size()){
  209. String sql4 = XmlSqlParsersFactory.getSql("UIJ060020_cargocn.delete");
  210. this.getDao("KgDao").ExcuteNonQuery(sql4, new Object[]{param[31]});
  211. flat="0";
  212. }
  213. String sql2 = XmlSqlParsersFactory.getSql("UIJ060020_cargocn.insert");
  214. Object[] param2 = new Object[25];
  215. param2[0] = param[10]; //真实钢卷号
  216. param2[1] = param[1]; //发运指示号
  217. param2[2] = param[18]; //牌号
  218. param2[3] = param[2]; //车牌号
  219. param2[4] = param[12]; //重量
  220. param2[5] = trnfDTime; //发货时间
  221. param2[6] = param[33]; //收货单位
  222. param2[7] = param[34]; //到站
  223. param2[8] = param[32]; //合同单位
  224. String SHIP_COMP = param[35];
  225. if(StringUtils.isEmpty(SHIP_COMP))
  226. SHIP_COMP = param[24];
  227. param2[9] = SHIP_COMP; //运输公司
  228. param2[10] = param[36]; //产品名称
  229. param2[11] = "新余市"; //发货城市
  230. param2[12] = "冷轧厂"; //发货地点
  231. param2[13] = 1; //订单类型
  232. //通过到站地点从产销数据库查收货城市、收货人、电话
  233. String receiveCity = param[34];
  234. String dlivno = param[1];
  235. String sql5="select a.UNLOADDOCK, a.SHR, a.SHRDH from sel_stationinfo a where a.STATIONCODE = (select DEST_PCD from tbj01_dliv_dir b where b.DLIV_DIRNO='"+dlivno+"' and rownum = 1)";
  236. String receiveNM = "";
  237. String receivePhone = "";
  238. ResultSet rs = this.getDao("KgDao").ExceuteQueryForResultSet(sql5);
  239. if (rs.next()) {
  240. receiveNM = rs.getString("SHR"); //收货人
  241. receivePhone = rs.getString("SHRDH"); //收货人电话
  242. if(StringUtils.isEmpty(receiveNM))
  243. receiveNM="";
  244. if(StringUtils.isEmpty(receivePhone))
  245. receivePhone="";
  246. if(!StringUtils.isEmpty(rs.getString("UNLOADDOCK")))
  247. receiveCity = rs.getString("UNLOADDOCK"); //收货城市
  248. }
  249. this.getDao("KgDao").closeRs(rs);
  250. param2[14] = receiveCity; //收货城市
  251. param2[15] = receiveNM; //收货联系人
  252. param2[16] = receivePhone; //收货联系人电话
  253. param2[17] = "6"; //未发送状态
  254. param2[18] = "LZMES_UIJ060020"; //程序id
  255. param2[19] = param[28]; //操作人
  256. param2[20]= param[29]; // 运输方式
  257. param2[21]= "A"; // 修改标示
  258. param2[22]= param[22]; // 合同号
  259. String sql4 = XmlSqlParsersFactory.getSql("UIJ060020_cargocn.dlivselect");
  260. ArrayList dlivList = (ArrayList) this.getDao("KgDao").ExcuteQueryReturnList(sql4,new Object[]{param[1]});
  261. //若表中存在该钢卷则删除
  262. if(null != dlivList && 0 != dlivList.size())
  263. {
  264. param2[23]="0";
  265. }
  266. else
  267. {
  268. param2[23]= czdWgt; // 草支垫扣重
  269. }
  270. param2[24]= param[37]; // 包装重量
  271. this.getDao("KgDao").ExcuteNonQuery(sql2, param2);
  272. if("0".equals(flat)){
  273. String sql = XmlSqlParsersFactory.getSql("UIJ060020_cargocn_01.update");
  274. this.getDao("KgDao").ExcuteNonQuery(sql, new Object[]{param2[1]});
  275. }
  276. }
  277. if(!list.isEmpty())
  278. {
  279. for (int i = 0; i < list.size(); i++) {
  280. String sql = XmlSqlParsersFactory.getSql("UIJ060020_cargocn_02.update");
  281. this.getDao("KgDao").ExcuteNonQuery(sql, new Object[]{list.get(i)});
  282. }
  283. }
  284. } catch (Exception e) {
  285. e.printStackTrace();
  286. }
  287. }
  288. /**
  289. * 打印发货明细后修改相关状态
  290. *
  291. * @param trnfShift
  292. * @param trnfGroup
  293. * @param trnfRegId
  294. * @param trnfDTime
  295. * @param czdWgt
  296. * @param params
  297. * @return
  298. * @throws SQLException
  299. */
  300. public CoreReturnObject printShippingResult(String trnfShift,
  301. String trnfGroup, String trnfRegId, String trnfDTime,
  302. String czdWgt, ArrayList<String[]> params) throws SQLException {
  303. CoreReturnObject cro = new CoreReturnObject();
  304. Connection conn = null;
  305. Statement sta = null;
  306. ArrayList<String> list=new ArrayList<String>();
  307. double sumCzdWgt = 0;
  308. int a=0;
  309. if(params != null){
  310. sumCzdWgt = params.size()*25;//草支垫重量修改为每卷25KG
  311. }
  312. try {
  313. conn = this.getDao("KgDao").getConnection();
  314. conn.setAutoCommit(false);
  315. updateInvoiceInfoOfDelivery(conn,params);
  316. for (int i = 0; i < params.size(); i++) {
  317. String[] param = params.get(i);
  318. String coilno=param[10];
  319. StringBuffer str = new StringBuffer();
  320. str.append(" SELECT COIL_NO, DLIV_DIRNO, SPEC_STL_GRD, TRANS_CAR_NO, COIL_WGT, TRNF_DTIME, ORD_NM, \n");
  321. str.append(" DEST_PCD_DESC, CUST_NM, SHIP_COMP_CD, SHIP_COMP_NM, SM_CFNM, SHIPPERCITY, SHIPPERADDR, \n");
  322. str.append(" ORDERTYPE, SHIPPERCONTACTNAME, SHIPPERCONTACTPHONE, RECEIVECONTACTNAME, RECEIVECONTACTPHONE, \n");
  323. str.append(" FREIGHTPAYSIDE, DRIVERNAME, DRIVERPHONE, SHIP_PROG_CD, REG_PGM_ID, REG_ID, REG_DTIME, \n");
  324. str.append(" MOD_PGM_ID, MOD_ID, MOD_DTIME, RECEIVECITY, TRANSMODE, EDITFLAG, PACTNO, KZZL, PKG_WGT \n");
  325. str.append(" FROM TBB01_CARGOCN_DATA WHERE COIL_NO = '");
  326. str.append(param[10]);
  327. str.append("' ");
  328. sta = conn.createStatement();
  329. ResultSet rs = sta.executeQuery(str.toString());
  330. while (rs.next()) {
  331. list.add(a, coilno);
  332. String sql4 = XmlSqlParsersFactory.getSql("UIJ060020_cargocn.delete");
  333. this.getDao("KgDao").ExcuteNonQuery(sql4,new Object[] { coilno });
  334. a++;
  335. }
  336. rs.close();
  337. sta.close();
  338. }
  339. saveCargocnData(params,czdWgt,trnfDTime,list);
  340. // 修改钢卷表发运状态及发运相关信息 、发运表发运状态
  341. updateShipProgStatus(conn,String.valueOf(sumCzdWgt), params);
  342. updateShipProgStatusOfPrint(conn,String.valueOf(sumCzdWgt), params);
  343. addshipdetail(conn,String.valueOf(sumCzdWgt),params);
  344. addzycoil(conn,params);
  345. conn.commit();
  346. } catch (Exception ex) {
  347. if(conn != null){
  348. conn.rollback();
  349. }
  350. cro.setV_errCode(-2);
  351. cro.setV_errMsg("发运明细打印失败!");
  352. ex.printStackTrace();
  353. } finally{
  354. if(conn != null && !conn.isClosed()){
  355. conn.close();
  356. }
  357. }
  358. return cro;
  359. }
  360. private void addshipdetail(Connection conn, String czdWgt,
  361. ArrayList<String[]> params) throws SQLException {
  362. for (int i = 0; i < params.size(); i++) {
  363. String[] param = params.get(i);
  364. Double wgt = Double.parseDouble(param[12]) / 1000;
  365. String sql = XmlSqlParsersFactory.getSql("UIJ060020_09.CALL");
  366. CallableStatement cstm = conn.prepareCall(sql);
  367. cstm.setString(1, "1");// 标志
  368. cstm.setString(2, param[1]);
  369. cstm.setString(3, param[2]);
  370. cstm.setString(4, param[18]);
  371. cstm.setString(5, param[30]);
  372. cstm.setString(6, "1");
  373. cstm.setString(7, wgt.toString());
  374. cstm.setString(8, czdWgt);
  375. cstm.setString(9, "4001LZ1");
  376. cstm.setString(10, "冷轧线");
  377. cstm.execute();
  378. cstm.close();
  379. }
  380. }
  381. private void addzycoil(Connection conn, ArrayList<String[]> params)
  382. throws SQLException {
  383. for (int i = 0; i < params.size(); i++) {
  384. String[] param = params.get(i);
  385. if (param[31].equals("224902")||param[31].equals("243187")) { // 中冶新材客户代码
  386. String sql = XmlSqlParsersFactory.getSql("UIJ060020_10.CALL");
  387. CallableStatement cstm = conn.prepareCall(sql);
  388. cstm.setString(1, param[10]);// 钢卷号
  389. cstm.execute();
  390. cstm.close();
  391. }
  392. }
  393. }
  394. /**
  395. * 修改车辆号
  396. * @param dlivDirNo
  397. * @param carNo
  398. * @return
  399. * @throws SQLException
  400. */
  401. public CoreReturnObject updateCarNo(String dlivDirNo,String carNo) throws SQLException {
  402. CoreReturnObject cro = new CoreReturnObject();
  403. Map result = this.getDao("KgDao").CoreBeginTranscation();
  404. String sql = XmlSqlParsersFactory.getSql("UIJ060020_07.UPDATE");
  405. this.getDao("KgDao").ExcuteNonQuery(sql, new Object[]{carNo,dlivDirNo});
  406. sql = XmlSqlParsersFactory.getSql("UIJ060020_08.UPDATE");
  407. this.getDao("KgDao").ExcuteNonQuery(sql, new Object[]{carNo,dlivDirNo});
  408. sql = XmlSqlParsersFactory.getSql("UIJ060020_09.UPDATE");
  409. this.getDao("KgDao").ExcuteNonQuery(sql, new Object[]{carNo,dlivDirNo});
  410. this.getDao("KgDao").CoreCommit(result);
  411. return cro;
  412. }
  413. private void updateInvoiceInfoOfDelivery(Connection conn,ArrayList<String[]> params)
  414. throws SQLException {
  415. PreparedStatement pSta = null;
  416. String sql = XmlSqlParsersFactory.getSql("UIJ060020_05.UPDATE");
  417. String dlivDirNo = "";
  418. for (int i = 0; i < params.size(); i++) {
  419. String[] param = params.get(i);
  420. if (i > 0) {
  421. if (dlivDirNo.equals(param[1])) {
  422. continue;
  423. } else {
  424. pSta = conn.prepareStatement(sql);
  425. pSta.setString(1, param[2]);
  426. pSta.setString(2, param[1]);
  427. pSta.executeUpdate();
  428. pSta.close();
  429. }
  430. } else {
  431. pSta = conn.prepareStatement(sql);
  432. pSta.setString(1, param[2]);
  433. pSta.setString(2, param[1]);
  434. pSta.executeUpdate();
  435. pSta.close();
  436. }
  437. dlivDirNo = param[1];
  438. }
  439. }
  440. /**
  441. * 修改钢卷表发运状态及发运相关信息
  442. *
  443. * @param czdWgt
  444. * @param params
  445. * @throws SQLException
  446. */
  447. private void updateShipProgStatusOfPrint(Connection conn,String czdWgt,
  448. ArrayList<String[]> params) throws SQLException {
  449. PreparedStatement pSta = null;
  450. Statement sta = null;
  451. for (int i = 0; i < params.size(); i++) {
  452. String[] param = params.get(i);
  453. // 更新钢卷公共表发运状态及发运相关信息
  454. String sql1 = XmlSqlParsersFactory.getSql("UIJ060020_06.UPDATE");
  455. pSta = conn.prepareStatement(sql1);
  456. pSta.setString(1, param[17]);
  457. pSta.setString(2, param[2]);
  458. pSta.setString(3, czdWgt);
  459. pSta.setString(4, param[10]);
  460. pSta.executeUpdate();
  461. pSta.close();
  462. }
  463. for (int i = 0; i < params.size(); i++) {
  464. String[] param = params.get(i);
  465. // 查询钢卷公共表中SHIP_PROG_CD状态,看是否全部改变
  466. boolean flag = true;
  467. String sql = "select a.SHIP_PROG_CD from C_TBL02_COIL_COMM a where a.ship_dirno = '"
  468. + param[0] + "' ";
  469. sta = conn.createStatement();
  470. ResultSet rs = sta.executeQuery(sql);
  471. while (rs.next()) {
  472. String shipProgCd = rs.getString("SHIP_PROG_CD");
  473. if (!"08".equals(shipProgCd)) {
  474. flag = false;
  475. }
  476. }
  477. rs.close();
  478. sta.close();
  479. // 判断同一发货指示下的钢卷是否全部保存,如果没有的话不能改变发货指示的状态
  480. if (flag) {
  481. String sql2 = XmlSqlParsersFactory.getSql("UIJ060020_04.UPDATE");
  482. pSta = conn.prepareStatement(sql2);
  483. pSta.setString(1, param[17]);
  484. pSta.setString(2, param[0]);
  485. pSta.executeUpdate();
  486. pSta.close();
  487. }
  488. }
  489. }
  490. /**
  491. * 生成质保书
  492. *
  493. * @param dlivDirNo
  494. * @param ordNo
  495. * @param ordSeq
  496. * @return
  497. */
  498. private boolean createQltyBook(ArrayList<String[]> params)
  499. throws SQLException {
  500. boolean flag = true;
  501. for (int i = 0; i < params.size(); i++) {
  502. String[] param = params.get(i);
  503. CoreReturnObject cro = new CoreReturnObject();
  504. String proName = XmlSqlParsersFactory.getSql("UIJ060020_01.CALL");
  505. String QltyBookNo = "";
  506. String retMsg = "";
  507. String[] inparams = new String[] { param[0], param[22], param[23] };
  508. String[] outparams = new String[] { QltyBookNo, retMsg };
  509. cro = this.getDao("KgDao").ExcuteProcedure(proName, inparams,
  510. outparams);
  511. System.out.println("createQltyBook QltyBookNo = " + QltyBookNo
  512. + " retMsg = " + retMsg + " cro = "
  513. + cro.getResult());
  514. }
  515. return flag;
  516. }
  517. }