40b0758e33d7b8da22b7c33b3b05ebaf8121be0d.svn-base 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778
  1. package com.kingdee.shr.compensation.web.handler.integrate;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.bos.util.EASResource;
  5. import com.kingdee.eas.common.EASBizException;
  6. import com.kingdee.jdbc.rowset.IRowSet;
  7. import com.kingdee.shr.base.syssetting.context.SHRContext;
  8. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  9. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  10. import com.kingdee.shr.base.syssetting.ml.SHRWebResource;
  11. import com.kingdee.shr.base.syssetting.sensitive.ShrSensitiveServiceUtil;
  12. import com.kingdee.shr.base.syssetting.web.util.WebUtil;
  13. import com.kingdee.shr.compensation.app.formula.common.FunctionTools;
  14. import com.kingdee.shr.compensation.exception.CmpBasicException;
  15. import com.kingdee.shr.compensation.util.BaseUtils;
  16. import com.kingdee.shr.compensation.util.report.CmpReportHelper;
  17. import com.kingdee.shr.compensation.util.report.CommonSQLUtil;
  18. import com.kingdee.shr.compensation.util.report.DataCacheManager;
  19. import com.kingdee.shr.compensation.util.report.FileConventHelper;
  20. import com.kingdee.util.StringUtils;
  21. import java.io.BufferedInputStream;
  22. import java.io.ByteArrayInputStream;
  23. import java.io.ByteArrayOutputStream;
  24. import java.io.Closeable;
  25. import java.io.FileOutputStream;
  26. import java.io.IOException;
  27. import java.io.OutputStream;
  28. import java.io.UnsupportedEncodingException;
  29. import java.math.BigDecimal;
  30. import java.sql.SQLException;
  31. import java.sql.Timestamp;
  32. import java.text.ParseException;
  33. import java.text.SimpleDateFormat;
  34. import java.util.ArrayList;
  35. import java.util.Calendar;
  36. import java.util.Date;
  37. import java.util.HashMap;
  38. import java.util.HashSet;
  39. import java.util.Iterator;
  40. import java.util.List;
  41. import java.util.Locale;
  42. import java.util.Map;
  43. import java.util.Set;
  44. import javax.servlet.ServletOutputStream;
  45. import javax.servlet.http.HttpServletRequest;
  46. import javax.servlet.http.HttpServletResponse;
  47. import javax.servlet.http.HttpSession;
  48. import org.apache.log4j.Logger;
  49. import org.apache.poi.openxml4j.opc.OPCPackage;
  50. import org.apache.poi.poifs.crypt.EncryptionInfo;
  51. import org.apache.poi.poifs.crypt.EncryptionMode;
  52. import org.apache.poi.poifs.crypt.Encryptor;
  53. import org.apache.poi.poifs.filesystem.POIFSFileSystem;
  54. import org.apache.poi.ss.usermodel.BorderStyle;
  55. import org.apache.poi.ss.usermodel.Cell;
  56. import org.apache.poi.ss.usermodel.CellStyle;
  57. import org.apache.poi.ss.usermodel.CellType;
  58. import org.apache.poi.ss.usermodel.DataFormat;
  59. import org.apache.poi.ss.usermodel.FillPatternType;
  60. import org.apache.poi.ss.usermodel.Font;
  61. import org.apache.poi.ss.usermodel.IndexedColors;
  62. import org.apache.poi.ss.usermodel.Row;
  63. import org.apache.poi.ss.usermodel.Sheet;
  64. import org.apache.poi.xssf.streaming.SXSSFSheet;
  65. import org.apache.poi.xssf.streaming.SXSSFWorkbook;
  66. import org.springframework.ui.ModelMap;
  67. public class FileExportHelper {
  68. private static Logger logger = Logger.getLogger(FileExportHelper.class);
  69. private static final int MAX_COLUMN_COUNT = 200;
  70. public FileExportHelper() {
  71. }
  72. public String assembleExportDataSql(HttpServletRequest request) {
  73. HttpSession session = request.getSession();
  74. String sql = session.getAttribute("exportDataSql").toString();
  75. return sql;
  76. }
  77. public String[] assembleQueryMode(HttpServletRequest request) throws SHRWebException {
  78. HttpSession session = request.getSession();
  79. List<Map<String, Object>> colModel = (List)session.getAttribute("colModel");
  80. return this.doAssembleQueryMode(request, colModel);
  81. }
  82. public String[] doAssembleQueryMode(HttpServletRequest request, List<Map<String, Object>> colModel) throws SHRWebException {
  83. String[] queryMode = new String[colModel.size()];
  84. Map<String, Object> col = null;
  85. long startTime = System.currentTimeMillis();
  86. Integer[] numberTypeItemPrefxArr = CmpReportHelper.getNumberTypeItemFieldSnArray(request);
  87. Map<String, Object> numberTypeCmpItemMap = DataCacheManager.getNumberTypeCmpItemMapInSession(request);
  88. int i = 0;
  89. for(int size = colModel.size(); i < size; ++i) {
  90. col = (Map)colModel.get(i);
  91. String index = col.get("index").toString();
  92. boolean hidden = false;
  93. if (col.get("hidden") != null) {
  94. hidden = Boolean.valueOf(col.get("hidden").toString());
  95. }
  96. String label = col.get("label") == null ? col.get("name").toString() : col.get("label").toString();
  97. StringBuffer buffer = new StringBuffer();
  98. buffer.append(index).append(",").append(hidden).append(",").append(label);
  99. String name = col.get("name").toString();
  100. boolean numItem = CmpReportHelper.isNumberTypeSN(numberTypeItemPrefxArr, name);
  101. buffer.append(",").append(numItem);
  102. String type;
  103. if (numItem) {
  104. type = name.toUpperCase(Locale.ENGLISH);
  105. type = type.contains(".") ? type.substring(type.indexOf(".") + 1) : type;
  106. int precision = Integer.valueOf(numberTypeCmpItemMap.get(type).toString());
  107. buffer.append(",").append(precision);
  108. } else {
  109. buffer.append(",").append(0);
  110. }
  111. type = col.containsKey("type") ? col.get("type").toString() : "String";
  112. if (!"IntEnum".equalsIgnoreCase(type) && !"StringEnum".equalsIgnoreCase(type) && !"Enum".equalsIgnoreCase(type)) {
  113. buffer.append(",").append(false);
  114. } else {
  115. buffer.append(",").append(true);
  116. }
  117. queryMode[i] = buffer.toString();
  118. }
  119. long endTime = System.currentTimeMillis();
  120. logger.info("assembleQueryMode cost time : " + (endTime - startTime));
  121. logger.info("export total count " + queryMode.length);
  122. return queryMode;
  123. }
  124. public void checkMaxExportColumnCount(String[] queryMode) throws SHRWebException {
  125. if (queryMode.length > 200) {
  126. throw new ShrWebBizException(new CmpBasicException(CmpBasicException.EXPORTFAIL, new Object[]{200}));
  127. }
  128. }
  129. public String exportToExcel(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
  130. String sql = this.assembleExportDataSql(request);
  131. IRowSet rowSet = CommonSQLUtil.executeQuery(sql);
  132. String[] queryMode = this.assembleQueryMode(request);
  133. List<Map<String, Object>> datas = this.transferRowSetToList(rowSet, queryMode);
  134. return this.doExportToExcel(request, response, datas, queryMode);
  135. }
  136. public String exportToExcel(HttpServletRequest request, HttpServletResponse response, String sql, String[] queryMode) throws SHRWebException {
  137. IRowSet rowSet = CommonSQLUtil.executeQuery(sql);
  138. List<Map<String, Object>> datas = this.transferRowSetToList(rowSet, queryMode);
  139. return this.doExportToExcel(request, response, datas, queryMode);
  140. }
  141. public String exportToPDF(HttpServletRequest request, HttpServletResponse response, String sql, String[] queryMode) throws SHRWebException, EASBizException, BOSException {
  142. Context ctx = SHRContext.getInstance().getContext();
  143. String psw = request.getParameter("psw");
  144. boolean isPswNeeded = ShrSensitiveServiceUtil.isExportInProtected(ctx, request);
  145. if (isPswNeeded && StringUtils.isEmpty(psw)) {
  146. throw new ShrWebBizException(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "exportPrivteProtected", ctx));
  147. } else {
  148. IRowSet rowSet = CommonSQLUtil.executeQuery(sql);
  149. List<Map<String, Object>> datas = this.transferRowSetToList(rowSet, queryMode);
  150. return this.doExportToPDF(request, response, datas, queryMode);
  151. }
  152. }
  153. public String exportToPDF(HttpServletRequest request, HttpServletResponse response, List<Map<String, Object>> datas, String[] queryMode) throws SHRWebException, EASBizException, BOSException {
  154. Context ctx = SHRContext.getInstance().getContext();
  155. String psw = request.getParameter("psw");
  156. boolean isPswNeeded = ShrSensitiveServiceUtil.isExportInProtected(ctx, request);
  157. if (isPswNeeded && StringUtils.isEmpty(psw)) {
  158. throw new ShrWebBizException(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "exportPrivteProtected", ctx));
  159. } else {
  160. return this.doExportToPDF(request, response, datas, queryMode);
  161. }
  162. }
  163. protected String doExportToPDF(HttpServletRequest request, HttpServletResponse response, List<Map<String, Object>> datas, String[] queryMode) throws ShrWebBizException {
  164. OutputStream os = null;
  165. BufferedInputStream in = null;
  166. FileOutputStream outputStream = null;
  167. try {
  168. long stime = System.currentTimeMillis();
  169. String title = this.assembleExprotTitile(request);
  170. String datetime = this.assembleExportDateTimeStr();
  171. String sheetTitle = title + "_" + datetime;
  172. SXSSFWorkbook wb = this.generateWorkBookData(datas, queryMode, sheetTitle, true);
  173. String dfileName = this.assembleExportFileName(request, sheetTitle);
  174. outputStream = FileConventHelper.getExcelFileOutputStream(dfileName);
  175. wb.write(outputStream);
  176. String pdfFileName = FileConventHelper.convertExcelToPdf(request, dfileName);
  177. os = response.getOutputStream();
  178. response.reset();
  179. response.setHeader("Content-Disposition", "attachment; filename=" + pdfFileName);
  180. response.setContentType("application/pdf");
  181. in = new BufferedInputStream(FileConventHelper.getPdfFileInputStream(dfileName));
  182. byte[] data = new byte[1024];
  183. int length;
  184. while((length = in.read(data)) != -1) {
  185. os.write(data, 0, length);
  186. }
  187. long etime = System.currentTimeMillis();
  188. logger.info(" do execute export pdf cost time: " + (etime - stime));
  189. return null;
  190. } catch (Exception var23) {
  191. throw new ShrWebBizException(var23.getMessage());
  192. } finally {
  193. BaseUtils.closeResource(new Closeable[]{outputStream, os, in});
  194. }
  195. }
  196. protected String assembleExprotTitile(HttpServletRequest request) {
  197. String title = request.getParameter("title");
  198. if (StringUtils.isEmpty(title)) {
  199. title = (String)request.getAttribute("title");
  200. }
  201. return title;
  202. }
  203. protected String doExportToExcel(HttpServletRequest request, HttpServletResponse response, List<Map<String, Object>> datas, String[] queryMode) throws SHRWebException {
  204. Context ctx = SHRContext.getInstance().getContext();
  205. String psw = request.getParameter("psw");
  206. boolean isPswNeeded;
  207. try {
  208. isPswNeeded = ShrSensitiveServiceUtil.isExportInProtected(ctx, request);
  209. } catch (EASBizException var377) {
  210. throw new ShrWebBizException(var377.getMessage(), var377);
  211. } catch (BOSException var378) {
  212. throw new SHRWebException(var378.getMessage(), var378);
  213. }
  214. if (isPswNeeded && StringUtils.isEmpty(psw)) {
  215. throw new ShrWebBizException(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "exportPrivteProtected", ctx));
  216. } else {
  217. long stime = System.currentTimeMillis();
  218. response.reset();
  219. response.setHeader("Content-disposition", "attachment; filename=" + this.getExportFileName(request));
  220. response.setContentType("application/msexcel");
  221. String sheetTitle = this.getSheetTitle(request);
  222. SXSSFWorkbook wb;
  223. Throwable var12;
  224. ServletOutputStream responseOutputStream;
  225. Throwable var14;
  226. EncryptionInfo info;
  227. if (StringUtils.isEmpty(psw)) {
  228. try {
  229. wb = this.generateWorkBookData(datas, queryMode, sheetTitle, false);
  230. var12 = null;
  231. try {
  232. responseOutputStream = response.getOutputStream();
  233. var14 = null;
  234. try {
  235. wb.write(responseOutputStream);
  236. long etime = System.currentTimeMillis();
  237. logger.info("do execute export cost time: " + (etime - stime));
  238. info = null;
  239. } catch (Throwable var375) {
  240. var14 = var375;
  241. throw var375;
  242. } finally {
  243. if (responseOutputStream != null) {
  244. if (var14 != null) {
  245. try {
  246. responseOutputStream.close();
  247. } catch (Throwable var368) {
  248. var14.addSuppressed(var368);
  249. }
  250. } else {
  251. responseOutputStream.close();
  252. }
  253. }
  254. }
  255. } catch (Throwable var380) {
  256. var12 = var380;
  257. throw var380;
  258. } finally {
  259. if (wb != null) {
  260. if (var12 != null) {
  261. try {
  262. wb.close();
  263. } catch (Throwable var366) {
  264. var12.addSuppressed(var366);
  265. }
  266. } else {
  267. wb.close();
  268. }
  269. }
  270. }
  271. return null;
  272. } catch (SQLException | IOException var382) {
  273. throw new SHRWebException(var382.getMessage(), var382);
  274. }
  275. } else {
  276. try {
  277. wb = this.generateWorkBookData(datas, queryMode, sheetTitle, false);
  278. var12 = null;
  279. try {
  280. responseOutputStream = response.getOutputStream();
  281. var14 = null;
  282. try {
  283. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  284. Throwable var16 = null;
  285. try {
  286. wb.write(baos);
  287. info = new EncryptionInfo(EncryptionMode.agile);
  288. Encryptor encryptor = info.getEncryptor();
  289. encryptor.confirmPassword(psw);
  290. ByteArrayInputStream workbookInput = new ByteArrayInputStream(baos.toByteArray());
  291. Throwable var20 = null;
  292. try {
  293. OPCPackage opc = OPCPackage.open(workbookInput);
  294. Throwable var22 = null;
  295. try {
  296. POIFSFileSystem fs = new POIFSFileSystem();
  297. Throwable var24 = null;
  298. try {
  299. OutputStream encOs = encryptor.getDataStream(fs);
  300. Throwable var26 = null;
  301. try {
  302. opc.save(encOs);
  303. } catch (Throwable var376) {
  304. var26 = var376;
  305. throw var376;
  306. } finally {
  307. if (encOs != null) {
  308. if (var26 != null) {
  309. try {
  310. encOs.close();
  311. } catch (Throwable var374) {
  312. var26.addSuppressed(var374);
  313. }
  314. } else {
  315. encOs.close();
  316. }
  317. }
  318. }
  319. fs.writeFilesystem(responseOutputStream);
  320. } catch (Throwable var384) {
  321. var24 = var384;
  322. throw var384;
  323. } finally {
  324. if (fs != null) {
  325. if (var24 != null) {
  326. try {
  327. fs.close();
  328. } catch (Throwable var373) {
  329. var24.addSuppressed(var373);
  330. }
  331. } else {
  332. fs.close();
  333. }
  334. }
  335. }
  336. } catch (Throwable var386) {
  337. var22 = var386;
  338. throw var386;
  339. } finally {
  340. if (opc != null) {
  341. if (var22 != null) {
  342. try {
  343. opc.close();
  344. } catch (Throwable var372) {
  345. var22.addSuppressed(var372);
  346. }
  347. } else {
  348. opc.close();
  349. }
  350. }
  351. }
  352. } catch (Throwable var388) {
  353. var20 = var388;
  354. throw var388;
  355. } finally {
  356. if (workbookInput != null) {
  357. if (var20 != null) {
  358. try {
  359. workbookInput.close();
  360. } catch (Throwable var371) {
  361. var20.addSuppressed(var371);
  362. }
  363. } else {
  364. workbookInput.close();
  365. }
  366. }
  367. }
  368. } catch (Throwable var390) {
  369. var16 = var390;
  370. throw var390;
  371. } finally {
  372. if (baos != null) {
  373. if (var16 != null) {
  374. try {
  375. baos.close();
  376. } catch (Throwable var370) {
  377. var16.addSuppressed(var370);
  378. }
  379. } else {
  380. baos.close();
  381. }
  382. }
  383. }
  384. } catch (Throwable var392) {
  385. var14 = var392;
  386. throw var392;
  387. } finally {
  388. if (responseOutputStream != null) {
  389. if (var14 != null) {
  390. try {
  391. responseOutputStream.close();
  392. } catch (Throwable var369) {
  393. var14.addSuppressed(var369);
  394. }
  395. } else {
  396. responseOutputStream.close();
  397. }
  398. }
  399. }
  400. } catch (Throwable var394) {
  401. var12 = var394;
  402. throw var394;
  403. } finally {
  404. if (wb != null) {
  405. if (var12 != null) {
  406. try {
  407. wb.close();
  408. } catch (Throwable var367) {
  409. var12.addSuppressed(var367);
  410. }
  411. } else {
  412. wb.close();
  413. }
  414. }
  415. }
  416. } catch (Exception var396) {
  417. throw new ShrWebBizException(var396.getMessage(), var396);
  418. }
  419. long etime = System.currentTimeMillis();
  420. logger.info(" do execute export cost time: " + (etime - stime));
  421. return null;
  422. }
  423. }
  424. }
  425. protected String getSheetTitle(HttpServletRequest request) {
  426. String title = this.assembleExprotTitile(request);
  427. String datetime = this.assembleExportDateTimeStr();
  428. return title + "_" + datetime;
  429. }
  430. protected String getExportFileName(HttpServletRequest request) throws SHRWebException {
  431. String sheetTitle = this.getSheetTitle(request);
  432. try {
  433. return this.assembleExportFileName(request, sheetTitle);
  434. } catch (UnsupportedEncodingException var4) {
  435. throw new SHRWebException(var4.getMessage(), var4);
  436. }
  437. }
  438. public List<Map<String, Object>> transferRowSetToList(IRowSet rowSet, String[] queryMode) throws SHRWebException {
  439. List<Map<String, Object>> datas = new ArrayList();
  440. if (rowSet != null && rowSet.size() >= 1 && queryMode != null && queryMode.length >= 1) {
  441. try {
  442. while(rowSet.next()) {
  443. Map<String, Object> dataMap = new HashMap();
  444. for(int i = 0; i < queryMode.length; ++i) {
  445. String[] column = queryMode[i].split(",");
  446. if (StringUtils.isEmpty(column[1]) || !Boolean.valueOf(column[1])) {
  447. dataMap.put(column[0], rowSet.getObject(column[0]));
  448. }
  449. }
  450. datas.add(dataMap);
  451. }
  452. return datas;
  453. } catch (SQLException var7) {
  454. throw new SHRWebException(var7.getMessage(), var7);
  455. }
  456. } else {
  457. return datas;
  458. }
  459. }
  460. protected SXSSFWorkbook generateWorkBookData(List<Map<String, Object>> datas, String[] queryMode, String sheetTitle, Boolean isPdf) throws SHRWebException, SQLException, IOException {
  461. if (datas == null) {
  462. datas = new ArrayList();
  463. }
  464. SXSSFWorkbook wb = new SXSSFWorkbook();
  465. CellStyle headCellStyle = wb.createCellStyle();
  466. Font fontStyle = wb.createFont();
  467. fontStyle.setFontName("Arial");
  468. fontStyle.setFontHeightInPoints((short)10);
  469. headCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
  470. headCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
  471. headCellStyle.setBorderTop(BorderStyle.THIN);
  472. headCellStyle.setBorderLeft(BorderStyle.THIN);
  473. headCellStyle.setBorderBottom(BorderStyle.THIN);
  474. headCellStyle.setBorderRight(BorderStyle.THIN);
  475. headCellStyle.setFont(fontStyle);
  476. Row row = null;
  477. Cell cell = null;
  478. CellStyle cellStyleString = wb.createCellStyle();
  479. cellStyleString.setFont(fontStyle);
  480. Sheet sheet = wb.createSheet(sheetTitle);
  481. int hCol = 0;
  482. row = sheet.createRow(0);
  483. Set<String> dotNumSet = new HashSet();
  484. for(int i = 0; i < queryMode.length; ++i) {
  485. String[] column = queryMode[i].split(",");
  486. boolean isHidden = Boolean.valueOf(column[1]);
  487. if (!isHidden) {
  488. cell = row.createCell(hCol);
  489. cell.setCellValue(column[2]);
  490. cell.setCellStyle(headCellStyle);
  491. ++hCol;
  492. }
  493. dotNumSet.add(column[4]);
  494. }
  495. Map<String, CellStyle> cellStyleMap = this.getCellStyleByDotNumber(dotNumSet, wb, fontStyle);
  496. int rowIndex = 0;
  497. Map<String, Object> sumDataMap = new HashMap();
  498. int rowSetSize = ((List)datas).size();
  499. BaseUtils utils = new BaseUtils();
  500. Map<String, String> enumSourceMap = new HashMap();
  501. DataFormat format = wb.createDataFormat();
  502. Iterator var21 = ((List)datas).iterator();
  503. while(var21.hasNext()) {
  504. Map<String, Object> data = (Map)var21.next();
  505. row = sheet.createRow(rowIndex + 1);
  506. int colIndex = 0;
  507. for(int i = 0; i < queryMode.length; ++i) {
  508. String[] column = queryMode[i].split(",");
  509. boolean isHidden = Boolean.valueOf(column[1]);
  510. if (!isHidden) {
  511. String colOne = column[0];
  512. Object valueObj = data.get(colOne);
  513. String value;
  514. if (!Boolean.valueOf(column[5])) {
  515. value = this.processCellValue(valueObj, column[3], column[4]);
  516. } else if (enumSourceMap.containsKey(colOne)) {
  517. String enumSource = (String)enumSourceMap.get(colOne);
  518. Object obj = utils.getStructColumnsPupolateValueByType("002", colOne, valueObj, enumSource);
  519. if (obj == null) {
  520. value = null;
  521. } else {
  522. value = obj.toString();
  523. }
  524. } else {
  525. Map<String, Map<String, Object>> structColumnsPupolateValue = utils.getStructColumnsPupolateValue("002", colOne, valueObj);
  526. enumSourceMap.put(colOne, ((Map)structColumnsPupolateValue.get(colOne)).get("type").toString());
  527. if (((Map)structColumnsPupolateValue.get(colOne)).get("value") == null) {
  528. value = null;
  529. } else {
  530. value = ((Map)structColumnsPupolateValue.get(colOne)).get("value").toString();
  531. }
  532. }
  533. //start xiaoxin 开始时间、结束时间、休息开始时间、休息结束时间只显示时分
  534. if(("startTime".equals(colOne) || "endTime".equals(colOne) || "restStartTime".equals(colOne) || "restEndTime".equals(colOne)) && valueObj instanceof Timestamp) {
  535. SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
  536. SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  537. try {
  538. value = dateFormat.format(timeFormat.parse(valueObj.toString()));
  539. } catch (ParseException e) {
  540. e.printStackTrace();
  541. }
  542. }
  543. //end xiaoxin
  544. boolean isNumType = Boolean.valueOf(column[3]);
  545. cell = row.createCell(colIndex);
  546. colOne = colOne.contains(".") ? colOne.substring(colOne.indexOf(".") + 1) : colOne;
  547. if ((!colOne.toUpperCase(Locale.ENGLISH).startsWith("S") || !isNumType) && !colOne.equalsIgnoreCase("personCounts")) {
  548. if (StringUtils.isEmpty(value)) {
  549. cell.setCellType(CellType.BLANK);
  550. } else {
  551. cell.setCellValue(value);
  552. cell.setCellStyle(cellStyleString);
  553. }
  554. cellStyleString.setDataFormat(format.getFormat("@"));
  555. } else {
  556. CellStyle cellStyleNumber = (CellStyle)cellStyleMap.get(column[4]);
  557. cell.setCellStyle(cellStyleNumber);
  558. if (null != value && !isPdf) {
  559. cell.setCellValue(Double.valueOf(value));
  560. } else {
  561. cell.setCellValue(value);
  562. }
  563. if (sumDataMap.get(colOne) == null) {
  564. sumDataMap.put(colOne, value);
  565. } else {
  566. Object tmp = sumDataMap.get(colOne);
  567. BigDecimal tmpV = tmp == null ? BigDecimal.ZERO : new BigDecimal(tmp.toString());
  568. if (!StringUtils.isEmpty(value)) {
  569. sumDataMap.put(colOne, tmpV.add(new BigDecimal(value)));
  570. }
  571. }
  572. }
  573. ++colIndex;
  574. }
  575. }
  576. ++rowIndex;
  577. //this.addSumRowData(wb, sheet, rowIndex, queryMode, sumDataMap, rowSetSize, cellStyleMap, isPdf);
  578. if (rowIndex % 100 == 0) {
  579. ((SXSSFSheet)sheet).flushRows();
  580. }
  581. }
  582. return wb;
  583. }
  584. protected void addSumRowData(SXSSFWorkbook wb, Sheet sheet, int rowIndex, String[] queryMode, Map<String, Object> sumDataMap, int rowSetSize, Map<String, CellStyle> cellStyleMap, Boolean isPdf) {
  585. if (rowSetSize == rowIndex) {
  586. Font fontStyle = wb.createFont();
  587. fontStyle.setFontName("Arial");
  588. fontStyle.setFontHeightInPoints((short)10);
  589. CellStyle cellStyleNumber = wb.createCellStyle();
  590. CellStyle cellStyleString = wb.createCellStyle();
  591. cellStyleString.setFont(fontStyle);
  592. String getSum = EASResource.getString("com.kingdee.shr.compensation.resource.CalPersonResource", "sumAll", SHRContext.getInstance().getContext().getLocale());
  593. int FIRSTCOLINDEX = 0;
  594. Row row = sheet.createRow(rowIndex + 1);
  595. int colIndex = 0;
  596. for(int i = 0; i < queryMode.length; ++i) {
  597. String[] column = queryMode[i].split(",");
  598. boolean isHidden = Boolean.valueOf(column[1]);
  599. if (!isHidden) {
  600. String colOne = column[0];
  601. boolean isNumType = Boolean.valueOf(column[3]);
  602. Cell cell = row.createCell(colIndex);
  603. colOne = colOne.contains(".") ? colOne.substring(colOne.indexOf(".") + 1) : colOne;
  604. String value = this.processCellValue(sumDataMap.get(colOne), column[3], column[4]);
  605. if (FIRSTCOLINDEX == colIndex) {
  606. value = getSum;
  607. }
  608. if ((!colOne.toUpperCase(Locale.ENGLISH).startsWith("S") || !isNumType) && !colOne.equalsIgnoreCase("personCounts")) {
  609. cell.setCellValue(value);
  610. cell.setCellStyle(cellStyleString);
  611. } else {
  612. cellStyleNumber = (CellStyle)cellStyleMap.get(column[4]);
  613. if (null != value && !isPdf) {
  614. cell.setCellValue(Double.valueOf(value));
  615. } else {
  616. cell.setCellValue(value);
  617. }
  618. cell.setCellStyle(cellStyleNumber);
  619. }
  620. ++colIndex;
  621. }
  622. }
  623. }
  624. }
  625. protected String assembleExportFileName(HttpServletRequest request, String sheetTitle) throws UnsupportedEncodingException {
  626. String dfileName = "";
  627. dfileName = WebUtil.convertFileNameForDownload(request, sheetTitle) + ".xlsx";
  628. return dfileName;
  629. }
  630. protected String assembleExportDateTimeStr() {
  631. Date currdate = new Date();
  632. Calendar c = Calendar.getInstance();
  633. c.setTime(currdate);
  634. String datetime = c.get(1) + "" + (c.get(2) + 1) + "" + c.get(5) + "";
  635. return datetime;
  636. }
  637. protected String processCellValue(Object value, Object fieldType, Object precision) {
  638. boolean isNumType = Boolean.valueOf(fieldType.toString());
  639. if (isNumType) {
  640. if (null == value) {
  641. return (String)value;
  642. } else {
  643. int pre = Integer.parseInt(precision.toString());
  644. return value == null ? null : FunctionTools.getRound(pre, (new BigDecimal(value == null ? "0" : value.toString())).doubleValue());
  645. }
  646. } else {
  647. if (value instanceof Timestamp) {
  648. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  649. try {
  650. return dateFormat.format(dateFormat.parse(value.toString()));
  651. } catch (ParseException var7) {
  652. var7.printStackTrace();
  653. }
  654. }
  655. return value == null ? null : value.toString();
  656. }
  657. }
  658. protected Map<String, CellStyle> getCellStyleByDotNumber(Set<String> dotNumSet, SXSSFWorkbook wb, Font fontStyle) {
  659. Map<String, CellStyle> map = new HashMap();
  660. DataFormat format = wb.createDataFormat();
  661. Iterator var6 = dotNumSet.iterator();
  662. while(true) {
  663. String value;
  664. CellStyle cellStyleNumber;
  665. boolean flag;
  666. do {
  667. if (!var6.hasNext()) {
  668. return map;
  669. }
  670. value = (String)var6.next();
  671. cellStyleNumber = wb.createCellStyle();
  672. cellStyleNumber.setFont(fontStyle);
  673. flag = org.apache.commons.lang3.StringUtils.isNumeric(value);
  674. } while(!flag);
  675. int num = Integer.valueOf(value);
  676. if (num == 0) {
  677. cellStyleNumber.setDataFormat(format.getFormat("###0"));
  678. } else {
  679. StringBuilder builder = new StringBuilder("###0.");
  680. for(int i = 0; i < num; ++i) {
  681. builder.append("0");
  682. }
  683. cellStyleNumber.setDataFormat(format.getFormat(builder.toString()));
  684. }
  685. map.put(value, cellStyleNumber);
  686. }
  687. }
  688. public String exportToExcel(HttpServletRequest request, HttpServletResponse response, List<Map<String, Object>> datas, String[] queryMode) throws SHRWebException {
  689. return this.doExportToExcel(request, response, datas, queryMode);
  690. }
  691. }