PositionSalaryStandardImportService.java 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package com.kingdee.eas.custom.compensationWeb.service;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.eas.custom.compensation.basedata.PositionSalaryStandardEntryCollection;
  5. import com.kingdee.eas.custom.compensation.basedata.PositionSalaryStandardEntryInfo;
  6. import com.kingdee.eas.custom.compensation.basedata.PositionSalaryStandardInfo;
  7. import com.kingdee.eas.framework.CoreBaseInfo;
  8. import com.kingdee.eas.hr.ats.AtsUtil;
  9. import com.kingdee.shr.base.syssetting.app.io.fileImport.BaseColumnInfo;
  10. import com.kingdee.shr.base.syssetting.app.io.fileImport.BaseImportService;
  11. import com.kingdee.shr.base.syssetting.app.io.fileImport.BaseRowInfo;
  12. import com.kingdee.shr.base.syssetting.app.io.fileImport.ImportException;
  13. import com.kingdee.shr.compensation.CmpItemCollection;
  14. import com.kingdee.shr.compensation.CmpItemFactory;
  15. import com.kingdee.shr.compensation.CmpItemInfo;
  16. import com.kingdee.shr.compensation.ICmpItem;
  17. import java.math.BigDecimal;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. import java.util.Map;
  21. /**
  22. * 岗位薪酬标准导入服务。
  23. * 将 Excel 中自定义薪酬项目列的值解析为 entry 子表记录。
  24. */
  25. public class PositionSalaryStandardImportService extends BaseImportService {
  26. private CmpItemCollection cmpItemCol = new CmpItemCollection();
  27. /**
  28. * 数值格式校验正则
  29. */
  30. private static final String NUMBER_PATTERN = "^\\d+(\\.\\d+)?$";
  31. @Override
  32. protected void initService() throws ImportException {
  33. try {
  34. Context ctx = this.getContext();
  35. // 收集所有自定义列(薪酬项目列)
  36. Map<String, BaseColumnInfo> columnMap = getColumnMap();
  37. List<String> cmpItems = new ArrayList<String>();
  38. for (String key : columnMap.keySet()) {
  39. BaseColumnInfo baseColumnInfo = columnMap.get(key);
  40. if (baseColumnInfo.isCustomField()) {
  41. cmpItems.add(key);
  42. }
  43. }
  44. // 批量查询薪酬项目
  45. ICmpItem iCmpItem = CmpItemFactory.getLocalInstance(ctx);
  46. cmpItemCol = iCmpItem.getCmpItemCollection(
  47. "select * where number in (" + AtsUtil.convertListToString(cmpItems) + ")");
  48. } catch (BOSException e) {
  49. throw new ImportException(e);
  50. }
  51. }
  52. @Override
  53. protected void setOtherFieldInfo(CoreBaseInfo baseInfo, BaseRowInfo row) throws ImportException {
  54. PositionSalaryStandardInfo info = (PositionSalaryStandardInfo) baseInfo;
  55. PositionSalaryStandardEntryCollection entryCollection = info.getEntry();
  56. // 遍历自定义列,匹配薪酬项目并设置金额
  57. for (int j = 0; j < cmpItemCol.size(); j++) {
  58. CmpItemInfo cmpItemInfo = cmpItemCol.get(j);
  59. // 校验金额是否为合法数值
  60. String money = row.getValueOfString(cmpItemInfo.getNumber());
  61. if (money == null || money.trim().isEmpty()) {
  62. // 空值跳过,不创建 entry
  63. break;
  64. }
  65. if (!money.trim().matches(NUMBER_PATTERN)) {
  66. throw new ImportException("薪酬项目[" + cmpItemInfo.getNumber() + "]的值[" + money + "]不是合法的数值格式");
  67. }
  68. PositionSalaryStandardEntryInfo entryInfo = new PositionSalaryStandardEntryInfo();
  69. entryInfo.setCmpItem(cmpItemInfo);
  70. entryInfo.setMoney(new BigDecimal(money.trim()));
  71. entryCollection.add(entryInfo);
  72. }
  73. }
  74. }