ImportDataFileDaoImpl.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839
  1. package com.data.dao.impl;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.Statement;
  7. import java.text.ParseException;
  8. import java.text.SimpleDateFormat;
  9. import java.util.*;
  10. import com.core.util.DateUtil;
  11. import org.apache.commons.lang.StringUtils;
  12. import org.hibernate.Query;
  13. import org.hibernate.SQLQuery;
  14. import org.hibernate.StatelessSession;
  15. import org.hibernate.Transaction;
  16. import org.slf4j.Logger;
  17. import org.slf4j.LoggerFactory;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import com.base.model.BaseWaterProperties;
  20. import com.base.service.IBaseWaterPropertiesService;
  21. import com.bus.model.BusMeterReadInfo;
  22. import com.bus.model.enumType.OrgImportStatus;
  23. import com.bus.service.IBusCustomerMeterService;
  24. import com.bus.service.IBusOrgService;
  25. import com.core.dao.impl.GenericDaoImpl;
  26. import com.core.util.DBUtils;
  27. import com.core.web.security.ContextUtil;
  28. import com.data.dao.IImportDataFileDao;
  29. import com.data.model.ImportDataFile;
  30. import com.data.model.enumType.ImportStatus;
  31. import com.data.service.IImportDataFileService;
  32. //import org.slf4j.Logger;
  33. //import org.slf4j.LoggerFactory;
  34. /**
  35. * 数据导入文件持久层接口类
  36. *
  37. * @author lha
  38. *
  39. */
  40. public class ImportDataFileDaoImpl extends GenericDaoImpl<ImportDataFile, Long>
  41. implements IImportDataFileDao {
  42. Logger log = LoggerFactory.getLogger(ImportDataFileDaoImpl.class);
  43. @Autowired
  44. private org.springframework.jdbc.core.JdbcTemplate jdbcTemplate;
  45. @Autowired
  46. protected org.hibernate.SessionFactory sessionFactory;
  47. @Autowired
  48. private IBusOrgService busOrgService;
  49. @Autowired
  50. private IBaseWaterPropertiesService baseWaterPropertiesService;
  51. @Autowired
  52. private IBusCustomerMeterService busCustomerMeter;
  53. @Autowired
  54. private IImportDataFileService importDataFileService;
  55. private int value = 5000;
  56. enum CheckType{
  57. customerNumber,
  58. meterNumber
  59. }
  60. public void insertOracleData(String year,ImportDataFile importDataFile,String tablename) {
  61. StatelessSession session = sessionFactory.openStatelessSession();
  62. Transaction tx = session.beginTransaction();
  63. try {
  64. SyncOracleData(year,importDataFile,tablename);
  65. SQLQuery query = session.createSQLQuery("{CALL bus_org_procedure(?,?)}");
  66. query.setString(0, year);
  67. query.setLong(1, importDataFile.getImportId());
  68. List list = query.list();
  69. tx.commit();
  70. session.close();
  71. importDataFile.setDataStatus(ImportStatus.complete.name());
  72. importDataFile.setStatusDescription("同步oracle单位信息成功!");
  73. importDataFileService.update(importDataFile);
  74. } catch (Exception e) {
  75. StringBuffer bs = new StringBuffer();
  76. bs.append("\n 失败原因: " + e.fillInStackTrace() + "");
  77. importDataFile.setDataStatus(ImportStatus.fail.name());
  78. importDataFile.setStatusDescription(bs.toString());
  79. importDataFileService.update(importDataFile);
  80. e.printStackTrace();
  81. tx.rollback();
  82. }
  83. }
  84. private void SyncOracleData(String year,ImportDataFile importDataFile,String tablename) throws Exception{
  85. Statement stmt = null;
  86. ResultSet rs = null;
  87. String strsql ="";
  88. Connection mysqlconn = null;
  89. Connection oracleconn = null;
  90. Statement sm = null;
  91. try {
  92. mysqlconn = DBUtils.getMysqlConn();
  93. sm = mysqlconn.createStatement();
  94. oracleconn = DBUtils.getOracleConn();
  95. stmt = (Statement) oracleconn.createStatement();
  96. //rs = stmt.executeQuery("SELECT COUNT(*) as count FROM "+tablename);
  97. //查询数据总数
  98. // int count = 0;
  99. //
  100. //// while (rs.next())
  101. //// {
  102. //// count = rs.getInt("count");
  103. //// }
  104. // int last = count % value;
  105. // int sum = (count - last) / value;
  106. // int numUp = value;
  107. // int numQuery = value;
  108. // for (int j = 0; j < sum + 1; j++)
  109. // {
  110. // if (j == sum)
  111. // {
  112. // numQuery = last;
  113. // numUp += last;
  114. // } else
  115. // {
  116. // if(j==0){
  117. // numUp = value;
  118. // }else{
  119. // numUp += value;
  120. // }
  121. // }
  122. // rs = stmt
  123. // .executeQuery(" SELECT TOP "
  124. // + numQuery
  125. // + " * "
  126. // + " FROM "
  127. // + " ( "
  128. // + " SELECT TOP "
  129. // + numUp
  130. // + " a.* "
  131. // + " FROM "+tablename+" a "
  132. // + " ORDER BY a.`HH` ASC "
  133. // + " ) ORDER BY `HH` DESC ");
  134. rs = stmt.executeQuery("SELECT * from "+tablename+" ORDER BY HH ASC ");
  135. strsql="";
  136. while (rs.next())
  137. {
  138. //取access字段值
  139. String KHH = String.valueOf(rs.getInt("KHH"));
  140. String HH = String.valueOf(rs.getInt("HH"));
  141. String BZMC = rs.getString("BZMC");
  142. if(BZMC==null){
  143. BZMC = "";
  144. }
  145. String ZBWZ = rs.getString("ZBWZ");
  146. if(ZBWZ==null){
  147. ZBWZ = "";
  148. }
  149. String YYQY = rs.getString("QQYQ");
  150. if(YYQY==null){
  151. YYQY = "";
  152. }
  153. String LXDH = rs.getString("LXDH");
  154. if(LXDH==null){
  155. LXDH = "";
  156. }
  157. String ZH = rs.getString("ZH");
  158. if(ZH==null){
  159. ZH = "";
  160. }
  161. String YSSX = rs.getString("YSSX");
  162. if(YSSX==null){
  163. YSSX = "";
  164. }
  165. // if(strsql==""){
  166. strsql = "('"+KHH+"', '"+HH+"', '"+BZMC+"', '"+ZBWZ+"', '"+YYQY+"', '"+LXDH+"', '"+ZH+"', '"+YSSX+"')";
  167. // }
  168. // else{
  169. // strsql += ",('"+KHH+"', '"+HH+"', '"+BZMC+"', '"+ZBWZ+"', '"+YYQY+"', '"+LXDH+"', '"+ZH+"')";
  170. // }
  171. sm.executeUpdate("insert into yhjbxx (KHH, HH, BZMC, ZBWZ, YYQY, LXDH, ZH, YSSX) values "+ strsql);
  172. }
  173. //sm.executeUpdate("insert into yhjbxx (KHH, HH, BZMC, ZBWZ, YYQY, LXDH, ZH, YSSX) values "+ strsql);
  174. // }
  175. sm.executeUpdate("DELETE Y FROM yhjbxx Y WHERE EXISTS ( SELECT * FROM `bus_org` bo JOIN `bus_customer_meter` bcm ON bo.`org_id`=bcm.`org_id` WHERE y.bzmc=bo.`org_name` AND y.yssx=(select base_org_type.org_name from base_org_type where base_org_type.`org_type_id` = bo.`org_type_id`) AND y.zbwz=bcm.`address` AND y.khh=bcm.`customer_Number` AND y.hh = bcm.`meter_Number` AND bcm.`year`='"+year+"')");
  176. sm.close();
  177. stmt.close();
  178. oracleconn.close();
  179. mysqlconn.close();
  180. DBUtils.closeConnection();
  181. }
  182. catch (Exception e) {
  183. StringBuffer bs = new StringBuffer();
  184. //获取当前抛出异常的字符串
  185. bs.append("\n" + e.fillInStackTrace() + "");
  186. //向上层抛出异常
  187. System.out.println("err oracle=============="+e.toString());
  188. }
  189. }
  190. private void insertYhjbxx(String mdbPath,ImportDataFile importDataFile,String year) throws Exception{
  191. Statement stmt = null;
  192. ResultSet rs = null;
  193. String strsql ="";
  194. Connection mysqlconn = null;
  195. Statement sm = null;
  196. try {
  197. mysqlconn = DBUtils.getMysqlConn();
  198. sm = mysqlconn.createStatement();
  199. sm.executeUpdate("truncate table yhjbxx");
  200. //打开对应数据库连接
  201. Connection conn = DBUtils
  202. .getConnection(
  203. DBUtils.DataBaseType.access,
  204. //"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)}; DBQ="+mdbPath+";charSet=GBK");
  205. "jdbc:odbc:driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+mdbPath+";charSet=GBK"); //64位
  206. stmt = (Statement) conn.createStatement();
  207. stmt.executeUpdate("DELETE FROM yhjbxx WHERE ZBWZ like 'YN%'");
  208. stmt.executeUpdate("alter table yhjbxx add `_AutoID_` AUTOINCREMENT(1,1);");
  209. rs = stmt
  210. .executeQuery("SELECT COUNT(*) as count FROM YHJBXX");
  211. //查询数据总数
  212. int count = 0;
  213. while (rs.next())
  214. {
  215. count = rs.getInt("count");
  216. }
  217. int last = count % value;
  218. int sum = (count - last) / value;
  219. int numUp = value;
  220. int numQuery = value;
  221. for (int j = 0; j < sum + 1; j++)
  222. {
  223. if (j == sum)
  224. {
  225. numQuery = last;
  226. numUp += last;
  227. } else
  228. {
  229. if(j==0){
  230. numUp = value;
  231. }else{
  232. numUp += value;
  233. }
  234. }
  235. rs = stmt
  236. .executeQuery(" SELECT TOP "
  237. + numQuery
  238. + " * "
  239. + " FROM "
  240. + " ( "
  241. + " SELECT TOP "
  242. + numUp
  243. + " a.* "
  244. + " FROM YHJBXX a "
  245. + " ORDER BY a.`_AutoID_` ASC "
  246. + " ) ORDER BY `_AutoID_` DESC ");
  247. strsql="";
  248. while (rs.next())
  249. {
  250. //取access字段值
  251. String KHH = String.valueOf(rs.getInt("KHH"));
  252. String HH = String.valueOf(rs.getInt("HH"));
  253. String BZMC = rs.getString("BZMC");
  254. if(BZMC==null){
  255. BZMC = "";
  256. }
  257. String ZBWZ = rs.getString("ZBWZ");
  258. if(ZBWZ==null){
  259. ZBWZ = "";
  260. }
  261. String YYQY = rs.getString("YYQY");
  262. if(YYQY==null){
  263. YYQY = "";
  264. }
  265. String LXDH = rs.getString("LXDH");
  266. if(LXDH==null){
  267. LXDH = "";
  268. }
  269. String ZH = rs.getString("ZH");
  270. if(ZH==null){
  271. ZH = "";
  272. }
  273. String YSSX = rs.getString("YSSX");
  274. if(YSSX==null){
  275. YSSX = "";
  276. }
  277. if(strsql==""){
  278. strsql = "('"+KHH+"', '"+HH+"', '"+BZMC+"', '"+ZBWZ+"', '"+YYQY+"', '"+LXDH+"', '"+ZH+"', '"+YSSX+"')";
  279. }
  280. else{
  281. strsql += ",('"+KHH+"', '"+HH+"', '"+BZMC+"', '"+ZBWZ+"', '"+YYQY+"', '"+LXDH+"', '"+ZH+"', '"+YSSX+"')";
  282. }
  283. }
  284. sm.executeUpdate("insert into yhjbxx (KHH, HH, BZMC, ZBWZ, YYQY, LXDH, ZH, YSSX) values "+ strsql);
  285. }
  286. sm.executeUpdate("DELETE Y FROM yhjbxx Y WHERE EXISTS ( SELECT * FROM `bus_org` bo JOIN `bus_customer_meter` bcm ON bo.`org_id`=bcm.`org_id` WHERE y.bzmc=bo.`org_name` AND y.yssx=(select base_org_type.org_name from base_org_type where base_org_type.`org_type_id` = bo.`org_type_id`) AND y.zbwz=bcm.`address` AND y.khh=bcm.`customer_Number` AND y.hh = bcm.`meter_Number` AND bcm.`year`='"+year+"')");
  287. sm.close();
  288. stmt.close();
  289. mysqlconn.close();
  290. conn.close();
  291. DBUtils.closeConnection();
  292. }
  293. catch (Exception e) {
  294. StringBuffer bs = new StringBuffer();
  295. //获取当前抛出异常的字符串
  296. bs.append("\n" + e.fillInStackTrace() + "");
  297. //向上层抛出异常
  298. throw new Exception(bs.toString());
  299. }
  300. }
  301. // @SuppressWarnings("rawtypes")
  302. @Override
  303. public void insertOrgInfoData(String mdbPath,String year,ImportDataFile importDataFile) {
  304. StatelessSession session = sessionFactory.openStatelessSession();
  305. Transaction tx = session.beginTransaction();
  306. try {
  307. insertYhjbxx(mdbPath,importDataFile,year);
  308. SQLQuery query = session.createSQLQuery("{CALL bus_org_procedure(?,?)}");
  309. query.setString(0, year);
  310. query.setLong(1, importDataFile.getImportId());
  311. // query.setInteger(2, 0);
  312. List list = query.list();
  313. tx.commit();
  314. session.close();
  315. // if("1".equals(list.get(0).toString())){
  316. // importDataFile.setDataStatus(ImportStatus.fail.name());
  317. // importDataFile.setStatusDescription("单位基本信息导入失败!");
  318. // session.update(importDataFile);
  319. // }else if("2".equals(list.get(0).toString())){
  320. importDataFile.setDataStatus(ImportStatus.complete.name());
  321. importDataFile.setStatusDescription("单位基本信息导入成功!");
  322. importDataFileService.update(importDataFile);
  323. // }
  324. } catch (Exception e) {
  325. StringBuffer bs = new StringBuffer();
  326. bs.append("\n 失败原因: " + e.fillInStackTrace() + "");
  327. importDataFile.setDataStatus(ImportStatus.fail.name());
  328. importDataFile.setStatusDescription(bs.toString());
  329. importDataFileService.update(importDataFile);
  330. e.printStackTrace();
  331. tx.rollback();
  332. }
  333. }
  334. //**
  335. @Override
  336. public void insertOracleCbxx(String year,ImportDataFile importDataFile,String month) {
  337. Statement stmt = null;
  338. ResultSet rs = null;
  339. StatelessSession session = sessionFactory.openStatelessSession();
  340. Transaction tx = session.beginTransaction();
  341. Set<Integer> setMonth = new HashSet<>();
  342. try {
  343. Connection conn = DBUtils.getOracleConn();
  344. stmt = (Statement) conn.createStatement();
  345. // rs = stmt.executeQuery("SELECT COUNT(0) as count FROM V_CBXX where to_number(to_char(SFYF,'yyyy'))='2020' and to_number(to_char(SFYF,'mm'))='1'");
  346. // int count = 0;
  347. // while (rs.next()) {
  348. // count = rs.getInt("count");
  349. // }
  350. // int last = count % value;
  351. // int sum = (count - last) / value;
  352. // int numUp = value;
  353. // int numQuery = value;
  354. // for (int j = 0; j < sum + 1; j++) {
  355. // if (j == sum) {
  356. // numQuery = last;
  357. // numUp += last;
  358. // } else {
  359. // if(j==0){
  360. // numUp = value;
  361. // }else{
  362. // numUp += value;
  363. // }
  364. // }
  365. rs = stmt.executeQuery("SELECT * FROM V_CBXX c where to_number(to_char(SFYF,'yyyy'))='2019' and to_number(to_char(SFYF,'mm'))<'5' ORDER BY c.HH,c.SL ASC");
  366. //rs = stmt.executeQuery("select * from V_CBXX where sfyf>to_date('2019-12-31','yyyy-mm-dd') ");
  367. // + numQuery
  368. // + " * FROM (SELECT TOP "
  369. // + numUp
  370. // + " * FROM V_CBXX c where to_number(to_char(SFYF,'yyyy'))='2020' and to_number(to_char(SFYF,'mm'))='1' ORDER BY c.HH,c.SL ASC) ORDER BY c.HH,c.SL DESC");
  371. while (rs.next()) {
  372. Integer HH = rs.getInt("HH");
  373. Date SFYF = rs.getDate("SFYF");
  374. String XZMC = rs.getString("XZMC");
  375. Float SL = rs.getFloat("SL");
  376. Float JBSFDJ = rs.getFloat("JBSFDJ");
  377. Float PWFDJ = rs.getFloat("PWFDJ");
  378. SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
  379. String dateString = formatter.format(SFYF);
  380. Float zyfdj = rs.getFloat("ZYFDJ");
  381. Float ysbl = rs.getFloat("YSBL");
  382. BusMeterReadInfo busMeterReadInfo = new BusMeterReadInfo();
  383. //根据水表查询对应单位
  384. // BusOrg org = getOrgForUserWaterInfo(session,String.valueOf(HH),year);
  385. // if(org==null){//没有对应单位的水表标识为待处理pending状态
  386. busMeterReadInfo.setImportStatus(OrgImportStatus.pending.name());
  387. // }else{//有对应单位的水表则标识为normal正常状态
  388. // busMeterReadInfo.setImportStatus(ImportStatus.normal.name());
  389. // }
  390. busMeterReadInfo.setPriceMonth(SFYF);
  391. //抄表月份
  392. Integer cb_month = Integer.valueOf(DateUtil.getFormatDateTime(SFYF,"MM"));
  393. //用set记录月份信息
  394. setMonth.add(cb_month);
  395. Float baseWaterPrice = null;
  396. if(XZMC!=null && !"".equals(XZMC)){
  397. //查找用水性质
  398. BaseWaterProperties baseWaterProperties = findBaseWaterProperties(session,XZMC);
  399. //如果用水性质不存在则新增用水性质
  400. if(baseWaterProperties==null){
  401. baseWaterPrice = JBSFDJ;
  402. BaseWaterProperties tmp = new BaseWaterProperties(XZMC,JBSFDJ);
  403. //tmp.setPropertiesName(XZMC);
  404. tmp.setWaterPrices(busMeterReadInfo.getMonth(),JBSFDJ);
  405. tmp.setCreater(ContextUtil.getCurrentUser());
  406. tmp.setCreateTime(new Date());
  407. session.insert(tmp);
  408. busMeterReadInfo.setBaseWaterProperties(findBaseWaterProperties(session,XZMC));
  409. }else{
  410. //根据月份拿到水价
  411. baseWaterPrice = baseWaterProperties.getWaterPrices(busMeterReadInfo.getMonth());
  412. if (baseWaterPrice == null){
  413. baseWaterPrice = JBSFDJ;
  414. baseWaterProperties.setWaterPrices(busMeterReadInfo.getMonth(),JBSFDJ);
  415. session.update(baseWaterProperties);
  416. }
  417. busMeterReadInfo.setBaseWaterProperties(baseWaterProperties);
  418. }
  419. }
  420. Integer quarter = null;
  421. if(cb_month==1 || cb_month==2 || cb_month==3){
  422. quarter = 1;
  423. }
  424. if(cb_month==4 || cb_month==5 || cb_month==6){
  425. quarter = 2;
  426. }
  427. if(cb_month==7 || cb_month==8 || cb_month==9){
  428. quarter = 3;
  429. }
  430. if(cb_month==10 || cb_month==11 || cb_month==12){
  431. quarter = 4;
  432. }
  433. busMeterReadInfo.setMonth(cb_month);
  434. busMeterReadInfo.setQuarter(quarter);
  435. busMeterReadInfo.setWater(SL);
  436. busMeterReadInfo.setMeterNumber(HH);
  437. //月份的水价
  438. busMeterReadInfo.setBaseWaterPrice(baseWaterPrice);
  439. busMeterReadInfo.setSewagePrice(PWFDJ);
  440. busMeterReadInfo.setImportId(importDataFile.getImportId());
  441. busMeterReadInfo.setZyfdj(zyfdj);
  442. busMeterReadInfo.setYsbl(ysbl);
  443. // //如果有匹配的水表,则该用水信息需要关联单位对象
  444. // if(org!=null){
  445. // busMeterReadInfo.setOrg(org);
  446. // }
  447. busMeterReadInfo.setYear(year);
  448. session.insert(busMeterReadInfo);
  449. }
  450. // }
  451. // tx.commit();
  452. SQLQuery query = session.createSQLQuery("{CALL update_user_water_info(?)}");
  453. query.setString(0, year);
  454. query.list();
  455. SQLQuery query2 = session.createSQLQuery("{CALL update_quarterly_assessment(?)}");
  456. query2.setString(0, year);
  457. query2.list();
  458. if (setMonth.size()>0){
  459. SQLQuery query3 = session.createSQLQuery("{CALL update_month_assessment(?,?)}");
  460. query3.setString(0, year);
  461. query3.setString(1, StringUtils.join(setMonth.toArray(),","));
  462. query3.list();
  463. }
  464. tx.commit();
  465. session.close();
  466. // updateWaterReadInfo(year);
  467. importDataFile.setDataStatus(ImportStatus.complete.name());
  468. importDataFile.setStatusDescription("单位月用水量信息导入成功!");
  469. importDataFileService.update(importDataFile);
  470. } catch (Exception e) {
  471. StringBuffer bs = new StringBuffer();
  472. bs.append("\n 失败原因: " + e.fillInStackTrace() + "");
  473. importDataFile.setDataStatus(ImportStatus.fail.name());
  474. importDataFile.setStatusDescription(bs.toString());
  475. importDataFileService.update(importDataFile);
  476. e.printStackTrace();
  477. tx.rollback();
  478. }
  479. }
  480. @Override
  481. public void insertMeterReadInfoData(String mdbPath,String year,ImportDataFile importDataFile) {
  482. Statement stmt = null;
  483. ResultSet rs = null;
  484. StatelessSession session = sessionFactory.openStatelessSession();
  485. Transaction tx = session.beginTransaction();
  486. Set<Integer> setMonth = new HashSet<>();
  487. try {
  488. Connection conn = DBUtils
  489. .getConnection(
  490. DBUtils.DataBaseType.access,
  491. //"jdbc:odbc:driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+mdbPath+";charSet=GBK");
  492. //"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)}; DBQ="+mdbPath+";charSet=GBK"); //32位
  493. "jdbc:odbc:driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+mdbPath+";charSet=GBK"); //64位
  494. stmt = (Statement) conn.createStatement();
  495. stmt.executeUpdate("alter table CBXX add `_AutoID_` AUTOINCREMENT(1,1);");
  496. rs = stmt.executeQuery("SELECT COUNT(*) as count FROM CBXX");
  497. int count = 0;
  498. while (rs.next()) {
  499. count = rs.getInt("count");
  500. }
  501. int last = count % value;
  502. int sum = (count - last) / value;
  503. int numUp = value;
  504. int numQuery = value;
  505. for (int j = 0; j < sum + 1; j++) {
  506. if (j == sum) {
  507. numQuery = last;
  508. numUp += last;
  509. } else {
  510. if(j==0){
  511. numUp = value;
  512. }else{
  513. numUp += value;
  514. }
  515. }
  516. rs = stmt
  517. .executeQuery("SELECT TOP "
  518. + numQuery
  519. + " * FROM (SELECT TOP "
  520. + numUp
  521. + " * FROM CBXX c ORDER BY c.`_AutoID_` ASC) ORDER BY `_AutoID_` DESC");
  522. while (rs.next()) {
  523. Integer HH = rs.getInt("HH");
  524. Date SFYF = rs.getDate("SFYF");
  525. String XZMC = rs.getString("XZMC");
  526. Float SL = rs.getFloat("SL");
  527. Float JBSFDJ = rs.getFloat("JBSFDJ");
  528. Float PWFDJ = rs.getFloat("PWFDJ");
  529. BusMeterReadInfo busMeterReadInfo = new BusMeterReadInfo();
  530. //根据水表查询对应单位
  531. // BusOrg org = getOrgForUserWaterInfo(session,String.valueOf(HH),year);
  532. // if(org==null){//没有对应单位的水表标识为待处理pending状态
  533. busMeterReadInfo.setImportStatus(OrgImportStatus.pending.name());
  534. // }else{//有对应单位的水表则标识为normal正常状态
  535. // busMeterReadInfo.setImportStatus(ImportStatus.normal.name());
  536. // }
  537. busMeterReadInfo.setPriceMonth(SFYF);
  538. //抄表月份
  539. Integer cb_month = Integer.valueOf(DateUtil.getFormatDateTime(SFYF,"MM"));
  540. //用set记录月份信息
  541. setMonth.add(cb_month);
  542. busMeterReadInfo.setMonth(cb_month);
  543. Float baseWaterPrice = null;
  544. if(XZMC!=null && !"".equals(XZMC)){
  545. //查找用水性质
  546. BaseWaterProperties baseWaterProperties = findBaseWaterProperties(session,XZMC);
  547. //如果用水性质不存在则新增用水性质
  548. if(baseWaterProperties==null){
  549. baseWaterPrice = JBSFDJ;
  550. BaseWaterProperties tmp = new BaseWaterProperties(XZMC,JBSFDJ);
  551. tmp.setPropertiesName(XZMC);
  552. tmp.setWaterPrices(busMeterReadInfo.getMonth(),JBSFDJ);
  553. tmp.setCreater(ContextUtil.getCurrentUser());
  554. tmp.setCreateTime(new Date());
  555. session.insert(tmp);
  556. busMeterReadInfo.setBaseWaterProperties(findBaseWaterProperties(session,XZMC));
  557. }else{
  558. //根据月份拿到水价
  559. baseWaterPrice = baseWaterProperties.getWaterPrices(busMeterReadInfo.getMonth());
  560. if (baseWaterPrice == null){
  561. baseWaterPrice = JBSFDJ;
  562. baseWaterProperties.setWaterPrices(busMeterReadInfo.getMonth(),JBSFDJ);
  563. session.update(baseWaterProperties);
  564. }
  565. busMeterReadInfo.setBaseWaterProperties(baseWaterProperties);
  566. }
  567. }
  568. Integer quarter = null;
  569. if(cb_month==1 || cb_month==2 || cb_month==3){
  570. quarter = 1;
  571. }
  572. if(cb_month==4 || cb_month==5 || cb_month==6){
  573. quarter = 2;
  574. }
  575. if(cb_month==7 || cb_month==8 || cb_month==9){
  576. quarter = 3;
  577. }
  578. if(cb_month==10 || cb_month==11 || cb_month ==12){
  579. quarter = 4;
  580. }
  581. busMeterReadInfo.setQuarter(quarter);
  582. busMeterReadInfo.setWater(SL);
  583. busMeterReadInfo.setMeterNumber(HH);
  584. //月份的水价
  585. busMeterReadInfo.setBaseWaterPrice(baseWaterPrice);
  586. busMeterReadInfo.setSewagePrice(PWFDJ);
  587. busMeterReadInfo.setImportId(importDataFile.getImportId());
  588. // //如果有匹配的水表,则该用水信息需要关联单位对象
  589. // if(org!=null){
  590. // busMeterReadInfo.setOrg(org);
  591. // }
  592. busMeterReadInfo.setYear(year);
  593. session.insert(busMeterReadInfo);
  594. }
  595. }
  596. // tx.commit();
  597. SQLQuery query = session.createSQLQuery("{CALL update_user_water_info(?)}");
  598. query.setString(0, year);
  599. query.list();
  600. SQLQuery query2 = session.createSQLQuery("{CALL update_quarterly_assessment(?)}");
  601. query2.setString(0, year);
  602. query2.list();
  603. if (setMonth.size()>0){
  604. SQLQuery query3 = session.createSQLQuery("{CALL update_month_assessment(?,?)}");
  605. query3.setString(0, year);
  606. query3.setString(1, StringUtils.join(setMonth.toArray(),","));
  607. query3.list();
  608. }
  609. tx.commit();
  610. session.close();
  611. // updateWaterReadInfo(year);
  612. importDataFile.setDataStatus(ImportStatus.complete.name());
  613. importDataFile.setStatusDescription("单位月用水量信息导入成功!");
  614. importDataFileService.update(importDataFile);
  615. } catch (Exception e) {
  616. StringBuffer bs = new StringBuffer();
  617. bs.append("\n 失败原因: " + e.fillInStackTrace() + "");
  618. importDataFile.setDataStatus(ImportStatus.fail.name());
  619. importDataFile.setStatusDescription(bs.toString());
  620. importDataFileService.update(importDataFile);
  621. e.printStackTrace();
  622. tx.rollback();
  623. }
  624. }
  625. @Override
  626. public void insertMeterReadInfoDataByExce(String year, List<String[]> dataList) {
  627. if (dataList.size() <= 0) {
  628. return ;
  629. }
  630. StatelessSession session = sessionFactory.openStatelessSession();
  631. Set<Integer> setMonth = new HashSet<>();
  632. Transaction tx = session.beginTransaction();
  633. for (int i = 1; i < dataList.size(); i++) {
  634. //跳过标题头
  635. String[] item = dataList.get(i);
  636. Integer HH = Integer.parseInt(item[0].toString());
  637. String str_SFYF = item[1];
  638. str_SFYF = str_SFYF.replaceAll("/","-");
  639. Date SFYF = null;
  640. try {
  641. SFYF = DateUtil.parseDate(str_SFYF,new String[]{"yyyy-MM-dd"});
  642. } catch (ParseException e) {
  643. e.printStackTrace();
  644. }
  645. String XZMC = item[2];
  646. Float SL = Float.valueOf(item[3]);
  647. Float JBSFDJ = Float.valueOf(item[4]);
  648. Float PWFDJ = Float.valueOf(item[5]);
  649. BusMeterReadInfo busMeterReadInfo = new BusMeterReadInfo();
  650. //根据水表查询对应单位
  651. // BusOrg org = getOrgForUserWaterInfo(session,String.valueOf(HH),year);
  652. // if(org==null){//没有对应单位的水表标识为待处理pending状态
  653. busMeterReadInfo.setImportStatus(OrgImportStatus.pending.name());
  654. // }else{//有对应单位的水表则标识为normal正常状态
  655. // busMeterReadInfo.setImportStatus(ImportStatus.normal.name());
  656. // }
  657. busMeterReadInfo.setPriceMonth(SFYF);
  658. //抄表月份
  659. Integer cb_month = Integer.valueOf(DateUtil.getFormatDateTime(SFYF,"MM"));
  660. //用set记录月份信息
  661. setMonth.add(cb_month);
  662. busMeterReadInfo.setMonth(cb_month);
  663. Float baseWaterPrice = null;
  664. if(XZMC!=null && !"".equals(XZMC)){
  665. //查找用水性质
  666. BaseWaterProperties baseWaterProperties = findBaseWaterProperties(session,XZMC);
  667. //如果用水性质不存在则新增用水性质
  668. if(baseWaterProperties==null){
  669. baseWaterPrice = JBSFDJ;
  670. BaseWaterProperties tmp = new BaseWaterProperties();
  671. tmp.setPropertiesName(XZMC);
  672. tmp.setWaterPrices(busMeterReadInfo.getMonth(),JBSFDJ);
  673. tmp.setCreater(ContextUtil.getCurrentUser());
  674. tmp.setCreateTime(new Date());
  675. session.insert(tmp);
  676. busMeterReadInfo.setBaseWaterProperties(findBaseWaterProperties(session,XZMC));
  677. }else{
  678. //根据月份拿到水价
  679. baseWaterPrice = baseWaterProperties.getWaterPrices(busMeterReadInfo.getMonth());
  680. if (baseWaterPrice == null){
  681. baseWaterPrice = JBSFDJ;
  682. baseWaterProperties.setWaterPrices(busMeterReadInfo.getMonth(),JBSFDJ);
  683. session.update(baseWaterProperties);
  684. }
  685. busMeterReadInfo.setBaseWaterProperties(baseWaterProperties);
  686. }
  687. }
  688. Integer quarter = null;
  689. if(cb_month==1 || cb_month==2 || cb_month==3){
  690. quarter = 1;
  691. }
  692. if(cb_month==4 || cb_month==5 || cb_month==6){
  693. quarter = 2;
  694. }
  695. if(cb_month==7 || cb_month==8 || cb_month==9){
  696. quarter = 3;
  697. }
  698. if(cb_month==10 || cb_month==11 || cb_month ==12){
  699. quarter = 4;
  700. }
  701. busMeterReadInfo.setQuarter(quarter);
  702. busMeterReadInfo.setWater(SL);
  703. busMeterReadInfo.setMeterNumber(HH);
  704. //月份的水价
  705. busMeterReadInfo.setBaseWaterPrice(baseWaterPrice);
  706. busMeterReadInfo.setSewagePrice(PWFDJ);
  707. busMeterReadInfo.setImportId(0L);
  708. busMeterReadInfo.setYear(year);
  709. session.insert(busMeterReadInfo);
  710. }
  711. SQLQuery query = session.createSQLQuery("{CALL update_user_water_info(?)}");
  712. query.setString(0, year);
  713. query.list();
  714. SQLQuery query2 = session.createSQLQuery("{CALL update_quarterly_assessment(?)}");
  715. query2.setString(0, year);
  716. query2.list();
  717. if (setMonth.size()>0){
  718. String monthStr = StringUtils.join(setMonth.toArray(),",");
  719. log.info(monthStr);
  720. SQLQuery query3 = session.createSQLQuery("{CALL update_month_assessment(?,?)}");
  721. query3.setString(0, year);
  722. query3.setString(1, monthStr);
  723. query3.list();
  724. }
  725. tx.commit();
  726. session.close();
  727. }
  728. /**
  729. * 查找用水性质
  730. * @param session
  731. * @param XZMC
  732. * @return
  733. */
  734. @SuppressWarnings("unchecked")
  735. private BaseWaterProperties findBaseWaterProperties(StatelessSession session,String XZMC) {
  736. List<BaseWaterProperties> list = new ArrayList<BaseWaterProperties>();
  737. try {
  738. Query dataItor = session.createQuery("SELECT b FROM BaseWaterProperties b WHERE propertiesName='"+XZMC+"'");
  739. list = (List<BaseWaterProperties>)dataItor.list();
  740. } catch (Exception e) {
  741. e.printStackTrace();
  742. }
  743. if(list.size()>0){
  744. return list.get(0);
  745. }else{
  746. return null;
  747. }
  748. }
  749. // private void updateWaterReadInfo(String year) {
  750. // RowMapper<Object[]> rowMapper = new RowMapper<Object[]>() {
  751. //
  752. // @Override
  753. // public Object[] mapRow(ResultSet rs, int index) throws SQLException {
  754. // Object[] obj = new Object[3];
  755. // obj[0] = rs.getInt("org_number");
  756. // obj[1] = rs.getLong("org_id");
  757. // obj[2] = rs.getInt("meter_Number");
  758. // return obj;
  759. // }
  760. //
  761. // };
  762. //
  763. // String sql = "SELECT bo.`org_number`,bo.`org_id`,bcm.`meter_Number` FROM `bus_org` bo JOIN `bus_customer_meter` bcm ON bo.`org_id`=bcm.`org_id` WHERE bo.`year`=?";
  764. // List<Object[]> list = jdbcTemplate.query(sql, rowMapper,year);
  765. // for (int i = 0; i < list.size(); i++) {
  766. // Object[] object = list.get(i);
  767. // String orgNumber = "";
  768. // if(object[0]!=null){
  769. // orgNumber = object[0].toString();
  770. // }
  771. // String s =
  772. // "UPDATE `bus_meter_read_info` SET `import_status`='normal',`org_id`=?,`org_number`=? WHERE `import_status`='pending' AND `meter_number`=? AND year=?" ;
  773. // jdbcTemplate.update(s, new Object[]{Long.valueOf(object[1].toString()),orgNumber,object[2].toString(),year});
  774. // }
  775. //
  776. // jdbcTemplate.update("DELETE FROM `bus_meter_read_info` WHERE `import_status`='pending'");
  777. // }
  778. }