dfb88ac66ff8fe6e09e23f8e1b5d72d4916e9eae.svn-base 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. /**
  2. *
  3. */
  4. package com.kingdee.shr.customer.gtiit.rpt;
  5. import java.io.IOException;
  6. import java.io.OutputStream;
  7. import java.io.UnsupportedEncodingException;
  8. import java.math.BigDecimal;
  9. import java.net.URLEncoder;
  10. import java.sql.Date;
  11. import java.sql.SQLException;
  12. import java.util.ArrayList;
  13. import java.util.HashMap;
  14. import java.util.HashSet;
  15. import java.util.LinkedHashMap;
  16. import java.util.List;
  17. import java.util.Map;
  18. import java.util.Set;
  19. import java.util.stream.Collectors;
  20. import javax.servlet.http.HttpServletRequest;
  21. import javax.servlet.http.HttpServletResponse;
  22. import org.apache.commons.lang3.StringUtils;
  23. import org.apache.poi.ss.usermodel.CellStyle;
  24. import org.apache.poi.ss.usermodel.DataFormat;
  25. import org.apache.poi.ss.usermodel.IndexedColors;
  26. import org.apache.poi.xssf.usermodel.XSSFCell;
  27. import org.apache.poi.xssf.usermodel.XSSFCellStyle;
  28. import org.apache.poi.xssf.usermodel.XSSFFont;
  29. import org.apache.poi.xssf.usermodel.XSSFRow;
  30. import org.apache.poi.xssf.usermodel.XSSFSheet;
  31. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  32. import org.json.JSONObject;
  33. import org.springframework.ui.ModelMap;
  34. import com.cloudera.impala.jdbc4.internal.apache.log4j.Logger;
  35. import com.kingdee.bos.BOSException;
  36. import com.kingdee.bos.Context;
  37. import com.kingdee.eas.util.app.DbUtil;
  38. import com.kingdee.jdbc.rowset.IRowSet;
  39. import com.kingdee.shr.base.syssetting.context.SHRContext;
  40. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  41. import com.kingdee.shr.base.syssetting.web.handler.ListHandler;
  42. import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
  43. import com.kingdee.shr.customer.gtiit.util.ExportAllUtils;
  44. /**
  45. * @author ISSUSER 兼职员工工时提报汇总表
  46. */
  47. public class DeclarationListHandler extends ListHandler {
  48. Context ctx = SHRContext.getInstance().getContext();
  49. private static Logger logger1 = Logger.getLogger("com.kingdee.shr.customer.gtiit.rpt.DeclarationListHandler");
  50. private int totalCount;
  51. public String getGridColModelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
  52. throws SHRWebException, BOSException, SQLException {
  53. List<String> colNames = this.getcolNamesAction();
  54. List<Map<String, Object>> colModel = this.getcolModelAction();
  55. LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
  56. map.put("colNames", colNames);
  57. map.put("colModel", colModel);
  58. JSONUtils.writeJson(response, map);
  59. return null;
  60. }
  61. public void getGridDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
  62. throws BOSException, SQLException, SHRWebException {
  63. int rows = Integer.parseInt(request.getParameter("rows"));
  64. int page = Integer.parseInt(request.getParameter("page"));
  65. // 获取过滤条件
  66. String fastFilterItems = request.getParameter("fastFilterItems");
  67. JSONObject tofastFilterItems = new JSONObject(fastFilterItems);
  68. // 获取时间
  69. // 入职时间段
  70. JSONObject periodEmploymentJson = tofastFilterItems.getJSONObject("periodEmployment");
  71. String pervalues = periodEmploymentJson.getString("values");
  72. String startDate = null;
  73. String endDate = null;
  74. if (pervalues != null && !pervalues.equals("")) {
  75. JSONObject periodEmploymentValues = periodEmploymentJson.getJSONObject("values");
  76. startDate = periodEmploymentValues.getString("startDate");
  77. endDate = periodEmploymentValues.getString("endDate");
  78. }
  79. // 获取状态
  80. JSONObject statusJson = tofastFilterItems.getJSONObject("status");
  81. String status = statusJson.getString("values");
  82. IRowSet rs = DbUtil.executeQuery(this.ctx, this.getSql(startDate, endDate, status));
  83. List<Map<String, Object>> maplist = new ArrayList<Map<String, Object>>();
  84. int num = 0;
  85. while (rs.next()) {
  86. ++num;
  87. if (num >= rows * (page - 1) + 1 && num <= rows * page) {
  88. Map<String, Object> map = new HashMap<String, Object>();
  89. map.put("Name", rs.getString("person"));
  90. map.put("FNumber", rs.getString("FNumber"));
  91. map.put("positionName", rs.getString("positionName"));
  92. map.put("CFSuperiorName", rs.getString("CFSuperiorName"));
  93. map.put("CFHourlyWage", rs.getBigDecimal("CFHourlyWage"));
  94. map.put("CFTotalWorkHours", rs.getBigDecimal("CFTotalWorkHours"));
  95. map.put("CFTotalAmount", rs.getBigDecimal("CFTotalAmount"));
  96. maplist.add(map);
  97. }
  98. }
  99. this.totalCount = num;
  100. Map<String, Object> gridDataMap = new LinkedHashMap<String, Object>();
  101. if (this.totalCount % rows == 0) {
  102. gridDataMap.put("total", this.totalCount / rows);
  103. } else {
  104. gridDataMap.put("total", this.totalCount / rows + 1);
  105. }
  106. gridDataMap.put("page", page);
  107. gridDataMap.put("records", this.totalCount);
  108. gridDataMap.put("rows", maplist);
  109. JSONUtils.writeJson(response, gridDataMap);
  110. }
  111. public ArrayList<String> getcolNamesAction() throws SHRWebException {
  112. ArrayList<String> list = new ArrayList<String>();
  113. list.add("Person Number 职工号");
  114. list.add("Name 姓名");
  115. list.add("Position 职位");
  116. list.add("Line Manager 直属上级");
  117. list.add("Hourly Rate 时薪");
  118. list.add("Working Hours 工时数");
  119. list.add("Total Payment 总工资");
  120. return list;
  121. }
  122. public List<Map<String, Object>> getcolModelAction() {
  123. List<Map<String, Object>> modelColList = new ArrayList<Map<String, Object>>();
  124. modelColList.add(this.buildColModelMap("FNumber", "Person Number 职工号", 70));
  125. modelColList.add(this.buildColModelMap("Name", "Name 姓名", 70));
  126. modelColList.add(this.buildColModelMap("positionName", "Position 职位", 70));
  127. modelColList.add(this.buildColModelMap("CFSuperiorName", "Line Manager 直属上级", 70));
  128. modelColList.add(this.buildColModelMap("CFHourlyWage", "Hourly Rate 时薪", 70));
  129. modelColList.add(this.buildColModelMap("CFTotalWorkHours", "Working Hours 工时数", 70));
  130. modelColList.add(this.buildColModelMap("CFTotalAmount", "Total Payment 总工资", 70));
  131. return modelColList;
  132. }
  133. private Map<String, Object> buildColModelMap(String index, String label, int width) {
  134. return this.buildColModelMap(index, label, width, false, false, false);
  135. }
  136. private Map<String, Object> buildColModelMap(String index, String label, int width, boolean rowspan, boolean isKey,
  137. boolean isHedden) {
  138. Map<String, Object> gridIdMap = new LinkedHashMap<String, Object>();
  139. gridIdMap.put("index", index);
  140. gridIdMap.put("name", index);
  141. gridIdMap.put("label", label);
  142. gridIdMap.put("width", width);
  143. if (rowspan) {
  144. gridIdMap.put("rowspan", rowspan);
  145. }
  146. if (isKey) {
  147. gridIdMap.put("key", isKey);
  148. }
  149. if (isHedden) {
  150. gridIdMap.put("hidden", isHedden);
  151. }
  152. return gridIdMap;
  153. }
  154. public String getSql(String starTime, String endTime, String status) {
  155. StringBuffer sql = new StringBuffer();
  156. sql.append("SELECT distinct d.FName_L1 as person,d.FNumber,e.FName_L1 as positionName,c.CFSuperiorName,c.CFHourlyWage ,a.CFTotalWorkHours,a.CFTotalAmount FROM T_HR_SBatchSubmitShemeBill a right join T_HR_SchemeBillEntry c on a.fid=c.FBillID left join t_bd_person d on c.FPersonID=d.fid left join T_ORG_Position e on c.FPositionID= e.fid where 1 =1 and a.fsubmitschemeid in(SELECT fid FROM T_HR_SCalSubmitScheme where fnumber in ('eply_GS','eply_LZGS'))\r\n" +
  157. "");
  158. // 可能传多个状态过来
  159. String[] statusArry = new String[0];
  160. if (StringUtils.isNoneBlank(status)) {
  161. statusArry = status.split(",");
  162. sql.append(" and a.FBillState in (");
  163. for (String statu : statusArry) {
  164. sql.append("'");
  165. sql.append(statu);
  166. sql.append("'");
  167. sql.append(",");
  168. }
  169. // 删除最后一个逗号
  170. sql.deleteCharAt(sql.length() - 1);
  171. sql.append(")");
  172. if (StringUtils.isNoneBlank(starTime) && StringUtils.isNoneBlank(endTime)) {
  173. sql.append(" and c.FEffectDate >=");
  174. sql.append("'");
  175. sql.append(starTime);
  176. sql.append("' and c.FEffectDate<= '");
  177. sql.append(endTime);
  178. sql.append("'");
  179. }
  180. } else if (StringUtils.isNoneBlank(starTime) && StringUtils.isNoneBlank(endTime)) {
  181. sql.append(" and c.FEffectDate >=");
  182. sql.append("'");
  183. sql.append(starTime);
  184. sql.append("' and c.FEffectDate<= '");
  185. sql.append(endTime);
  186. sql.append("'");
  187. }
  188. return sql.toString();
  189. }
  190. // 导出
  191. // 导出数据
  192. public String toExcelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
  193. throws BOSException, SQLException, SHRWebException {
  194. // 获取过滤条件
  195. String fastFilterItems = request.getParameter("fastFilterItems");
  196. JSONObject tofastFilterItems = new JSONObject(fastFilterItems);
  197. // 获取时间
  198. // 入职时间段
  199. JSONObject periodEmploymentJson = tofastFilterItems.getJSONObject("periodEmployment");
  200. String pervalues = periodEmploymentJson.getString("values");
  201. String startDate = null;
  202. String endDate = null;
  203. if (pervalues != null && !pervalues.equals("")) {
  204. JSONObject periodEmploymentValues = periodEmploymentJson.getJSONObject("values");
  205. startDate = periodEmploymentValues.getString("startDate");
  206. endDate = periodEmploymentValues.getString("endDate");
  207. }
  208. // 获取状态
  209. JSONObject statusJson = tofastFilterItems.getJSONObject("status");
  210. String status = statusJson.getString("values");
  211. IRowSet rs = DbUtil.executeQuery(this.ctx, this.getSql(startDate, endDate, status));
  212. LinkedHashMap<String, String> selectFieldsTypeMap = new LinkedHashMap<String, String>();
  213. String stringType = "String_@";
  214. // String dateType = "Date_yyyy/MM/dd";
  215. // String numberType = "Number_0_%s";
  216. selectFieldsTypeMap.put("FNumber", stringType);
  217. selectFieldsTypeMap.put("person", stringType);
  218. selectFieldsTypeMap.put("positionName", stringType);
  219. selectFieldsTypeMap.put("CFSuperiorName", stringType);
  220. selectFieldsTypeMap.put("CFHourlyWage", stringType);
  221. selectFieldsTypeMap.put("CFTotalWorkHours", stringType);
  222. selectFieldsTypeMap.put("CFTotalAmount", stringType);
  223. ArrayList<String> list = this.getcolNamesAction();
  224. ArrayList<String> fieldlist = this.getcolNamesAction();
  225. fieldlist.add("CFHourlyWage");
  226. fieldlist.add("CFTotalWorkHours");
  227. fieldlist.add("CFTotalAmount");
  228. exportData(response, rs, "StaffTimekeepingList.xlsx", selectFieldsTypeMap, list,fieldlist);
  229. return null;
  230. }
  231. /**
  232. *
  233. * @param response
  234. * response
  235. * @param resource
  236. * 需要导出的数据源
  237. * @param fileName
  238. * 导出文件名称
  239. * @param selectFieldsTypeMap
  240. * 存放查询字段对应导出类型和导出样式 key selectField 导出字段 value
  241. * fieldType_cellStyleMap key 导出查询字段 value 导出类型_导出样式 导出样式 key
  242. * DateType 日期格式 value "yyyy-mm-dd" key NumberType 数字 value '0.0_
  243. * '->保留一位小数 '0_ '->整数 key StringType 文本 value @
  244. * @throws SQLException
  245. */
  246. public static void exportData(HttpServletResponse response, Object resource, String fileName,
  247. LinkedHashMap<String, String> selectFieldsTypeMap,List<String>list,List<String>fiedlist) throws SQLException {
  248. // 创建新的Excel 工作簿
  249. // Excel2003版本(包含2003)以前使用HSSFWorkbook类,扩展名为.xls
  250. // Excel2007版本(包含2007)以后使用XSSFWorkbook类,扩展名为.xlsx
  251. XSSFWorkbook workBook = new XSSFWorkbook();
  252. // 在Excel工作簿中创建新的工作表,名为"Sheet1"
  253. XSSFSheet sheet = workBook.createSheet("Sheet1");
  254. DataFormat format = workBook.createDataFormat();
  255. // 设置数字格式为整数,不保留小数 (_ )空格是必须要切勿格式
  256. if (resource != null) {
  257. if (resource instanceof IRowSet) {
  258. IRowSet rs = (IRowSet) resource;
  259. // 列数
  260. int numColumns = selectFieldsTypeMap.entrySet().size();
  261. // 创建多行多列的数据
  262. int i = 0;
  263. // 创建标题
  264. XSSFRow titleRow = sheet.createRow(i);
  265. // 列名
  266. List<String> keyList = selectFieldsTypeMap.keySet().stream().collect(Collectors.toList());
  267. //List<String> chineseList = fieldsTypeMap.keySet().stream().collect(Collectors.toList());
  268. // 创建字体样式
  269. XSSFFont font = workBook.createFont();
  270. font.setFontName("宋体"); // 设置字体为 Arial
  271. font.setFontHeightInPoints((short) 11); // 设置字体大小为 12 点
  272. font.setColor(IndexedColors.BLACK.getIndex()); // 设置字体颜色为黑色
  273. font.setBold(true);
  274. // 创建一个新的单元格样式,并将字体样式应用于该样式
  275. CellStyle cellStyle = workBook.createCellStyle();
  276. cellStyle.setFont(font);
  277. if (i == 0) {
  278. for (int j = 0; j < numColumns; j++) {
  279. // 创建列
  280. XSSFCell cell = titleRow.createCell(j);
  281. //cell.setCellValue(keyList.get(j));
  282. //cell.setCellValue(chineseList.get(j));
  283. cell.setCellValue(list.get(j));
  284. cell.setCellValue(list.get(j));
  285. // 调整列宽
  286. sheet.setColumnWidth(j, 6000);
  287. // 应用字体样式
  288. titleRow.getCell(j).setCellStyle(cellStyle);
  289. }
  290. }
  291. i++;
  292. // 创建数据
  293. while (rs.next()) {
  294. try {
  295. XSSFRow dateRow = sheet.createRow(i);
  296. for (int j = 0; j < numColumns; j++) {
  297. // 创建列
  298. XSSFCell cell = dateRow.createCell(j);
  299. // 由于开发与测试环境的数据库类型与不一致 导致无法从数据库表读取相关字段类型判断 且有相关计算字段
  300. // 所以采用参数判断
  301. String column = keyList.get(j);
  302. String fieldTypeAndcellStyleType = selectFieldsTypeMap.get(column);
  303. int indexOf = fieldTypeAndcellStyleType.indexOf("_");
  304. // 字段属性类型
  305. String fieldType = fieldTypeAndcellStyleType.substring(0, indexOf);
  306. //样式类型
  307. String cellStyleType = fieldTypeAndcellStyleType.substring(indexOf + 1,
  308. fieldTypeAndcellStyleType.length());
  309. // 不设置格式
  310. if(fiedlist.contains(column)&&StringUtils.isNotBlank(rs.getString(column))) {
  311. String bigcolumn=rs.getBigDecimal(column).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
  312. cell.setCellValue(bigcolumn);
  313. }else {
  314. cell.setCellValue(rs.getString(column));
  315. }
  316. // if ("Date".equals(fieldType)) {
  317. // // 日期
  318. // // cell.setCellValue(rs.getString(column));
  319. // Date date = rs.getDate(column);
  320. // cell.setCellValue(date);
  321. // XSSFCellStyle stylee = workBook.createCellStyle();
  322. // stylee.setDataFormat(format.getFormat(cellStyleType));
  323. // cell.setCellStyle(stylee);
  324. // // cell.setCellValue(rs.getString(column));
  325. // } else if ("Number".equals(fieldType)) {
  326. // // 数值 (小数和整数)
  327. // String value = rs.getString(column);
  328. // cell.setCellValue(value);
  329. // if (value != null && !("").equals(value)) {
  330. // XSSFCellStyle style = workBook.createCellStyle();
  331. // style.setDataFormat(format.getFormat(String.format(cellStyleType, " ")));
  332. // cell.setCellStyle(style);
  333. // if (cellStyleType.contains(".")) {
  334. // // 小数
  335. // cell.setCellValue(Double.parseDouble(value));
  336. // } else {
  337. // cell.setCellValue(Integer.parseInt(value));
  338. // }
  339. // }
  340. // } else if ("String".equals(fieldType)) {
  341. // // 文本类型
  342. // if (rs.getString(column) != null && !("").equals(rs.getString(column))) {
  343. // // style.setDataFormat(format.getFormat(cellStyleType));
  344. // // cell.setCellStyle(style);
  345. // cell.setCellValue(rs.getString(column));
  346. // }
  347. // }
  348. }
  349. i++;
  350. } catch (Exception e) {
  351. logger1.info("Excel file was created Error!" + e.getMessage());
  352. }
  353. }
  354. try {
  355. setResponseHeader(response, fileName);
  356. OutputStream os = response.getOutputStream();
  357. workBook.write(os);
  358. workBook.close();
  359. os.flush();
  360. os.close();
  361. logger1.info("Excel file was created successfully!");
  362. } catch (IOException e) {
  363. logger1.info("Error while writing to file " + e.getMessage());
  364. e.printStackTrace();
  365. }
  366. }
  367. }
  368. }
  369. public static void setResponseHeader(HttpServletResponse response, String fileName) {
  370. try {
  371. try {
  372. fileName = URLEncoder.encode(fileName, "UTF-8");
  373. } catch (UnsupportedEncodingException e) {
  374. e.printStackTrace();
  375. }
  376. response.setContentType("application/octet-stream;charset=UTF-8");
  377. response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
  378. response.addHeader("Pargam", "no-cache");
  379. response.addHeader("Cache-Control", "no-cache");
  380. } catch (Exception ex) {
  381. ex.printStackTrace();
  382. }
  383. }
  384. }