PositionSalaryStandardListHandler.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package com.kingdee.eas.custom.compensationWeb.handler;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.eas.custom.compensation.basedata.*;
  4. import com.kingdee.eas.hr.ats.AtsUtil;
  5. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  6. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  7. import com.kingdee.shr.base.syssetting.json.GridDataEntity;
  8. import com.kingdee.shr.base.syssetting.web.handler.SHRSubBasicItemListHandler;
  9. import com.kingdee.shr.compensation.CmpItemInfo;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. /**
  16. * 岗位薪酬标准列表 Handler。
  17. * 在列表数据加载后,将每条记录的薪酬项目(CmpItem)编号和金额展开为动态列。
  18. */
  19. public class PositionSalaryStandardListHandler extends SHRSubBasicItemListHandler {
  20. /**
  21. * 列表数据加载后处理:遍历每条记录的 entry 子表,按薪酬项目编码展开金额到主行。
  22. */
  23. protected void afterGetListData(
  24. HttpServletRequest request,
  25. HttpServletResponse response,
  26. GridDataEntity gridDataEntity
  27. ) throws SHRWebException {
  28. try {
  29. List<Map<String, Object>> rows = gridDataEntity.getRows();
  30. // 构建主记录 ID → 行索引映射
  31. Map<String, Integer> shrBasicItems = new HashMap<String, Integer>();
  32. for (int i = 0; i < rows.size(); i++) {
  33. Map<String, Object> map = rows.get(i);
  34. shrBasicItems.put(map.get("id").toString(), i);
  35. }
  36. // 批量查询带 entry 子表和薪酬项目的记录
  37. IPositionSalaryStandard iPositionSalaryStandard =
  38. PositionSalaryStandardFactory.getLocalInstance(this.getContext());
  39. PositionSalaryStandardCollection positionSalaryStandardCol =
  40. iPositionSalaryStandard.getPositionSalaryStandardCollection(
  41. "select id,entry.*,entry.cmpItem.number where id in ("
  42. + AtsUtil.convertSetToString(shrBasicItems.keySet()) + ")");
  43. // 展开 entry 子表数据到主行
  44. for (int i = 0; i < positionSalaryStandardCol.size(); i++) {
  45. PositionSalaryStandardInfo info = positionSalaryStandardCol.get(i);
  46. Integer index = shrBasicItems.get(info.getId().toString());
  47. Map<String, Object> map = rows.get(index);
  48. PositionSalaryStandardEntryCollection entryCol = info.getEntry();
  49. for (int j = 0; j < entryCol.size(); j++) {
  50. PositionSalaryStandardEntryInfo entryInfo = entryCol.get(j);
  51. CmpItemInfo cmpItem = entryInfo.getCmpItem();
  52. if (cmpItem != null) {
  53. // 以薪酬项目编码为 key,金额为 value 放入行数据
  54. map.put(cmpItem.getNumber(), entryInfo.getMoney());
  55. }
  56. }
  57. }
  58. } catch (BOSException e) {
  59. throw new ShrWebBizException(e);
  60. }
  61. }
  62. /**
  63. * 导出数据后处理:与列表展示逻辑一致,将 entry 子表数据展开到每行。
  64. */
  65. public void afterGetExportData(
  66. HttpServletRequest request,
  67. HttpServletResponse response,
  68. List rows
  69. ) throws SHRWebException {
  70. try {
  71. // 构建主记录 ID → 行索引映射
  72. Map<String, Integer> shrBasicItems = new HashMap<String, Integer>();
  73. for (int i = 0; i < rows.size(); i++) {
  74. Map<String, Object> map = (Map<String, Object>) rows.get(i);
  75. shrBasicItems.put(map.get("id").toString(), i);
  76. }
  77. // 批量查询带 entry 子表和薪酬项目的记录
  78. IPositionSalaryStandard iPositionSalaryStandard =
  79. PositionSalaryStandardFactory.getLocalInstance(this.getContext());
  80. PositionSalaryStandardCollection positionSalaryStandardCol =
  81. iPositionSalaryStandard.getPositionSalaryStandardCollection(
  82. "select id,entry.*,entry.cmpItem.number where id in ("
  83. + AtsUtil.convertSetToString(shrBasicItems.keySet()) + ")");
  84. // 展开 entry 子表数据到行
  85. for (int i = 0; i < positionSalaryStandardCol.size(); i++) {
  86. PositionSalaryStandardInfo info = positionSalaryStandardCol.get(i);
  87. Integer index = shrBasicItems.get(info.getId().toString());
  88. Map<String, Object> map = (Map<String, Object>) rows.get(index);
  89. PositionSalaryStandardEntryCollection entryCol = info.getEntry();
  90. for (int j = 0; j < entryCol.size(); j++) {
  91. PositionSalaryStandardEntryInfo entryInfo = entryCol.get(j);
  92. CmpItemInfo cmpItem = entryInfo.getCmpItem();
  93. if (cmpItem != null) {
  94. map.put(cmpItem.getNumber(), entryInfo.getMoney());
  95. }
  96. }
  97. }
  98. } catch (BOSException e) {
  99. throw new ShrWebBizException(e);
  100. }
  101. }
  102. }