SaveOAHireSalaryData.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package com.kingdee.eas.custom.hireapproval.service;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  5. import com.kingdee.eas.basedata.assistant.CurrencyCollection;
  6. import com.kingdee.eas.basedata.assistant.CurrencyFactory;
  7. import com.kingdee.eas.basedata.assistant.ICurrency;
  8. import com.kingdee.eas.common.EASBizException;
  9. import com.kingdee.eas.custom.hireapproval.*;
  10. import com.kingdee.eas.custom.hireapproval.bizEnum.ExecuteStateEnum;
  11. import com.kingdee.eas.custom.hireapproval.bizEnum.SalaryTypeEnum;
  12. import com.kingdee.eas.utils.StringExUtils;
  13. import com.kingdee.shr.cmpdesign.app.v2.base.AdjustSalaryItemCollection;
  14. import com.kingdee.shr.cmpdesign.app.v2.base.AdjustSalaryItemFactory;
  15. import com.kingdee.shr.cmpdesign.app.v2.base.IAdjustSalaryItem;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.apache.log4j.Logger;
  18. import java.math.BigDecimal;
  19. import java.text.ParseException;
  20. import java.text.SimpleDateFormat;
  21. import java.util.Date;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. /**
  26. * @Description 写入OA录用定薪数据
  27. * @Date 2025/7/25 15:49
  28. * @Created by Heyuan
  29. */
  30. public class SaveOAHireSalaryData implements IHRMsfService {
  31. private static Logger logger = Logger.getLogger(SaveOAHireSalaryData.class);
  32. @Override
  33. public Object process(Context ctx, Map<String, Object> params) throws EASBizException, BOSException {
  34. logger.error("开始执行 SaveOAHireSalaryData");
  35. Map<String, Object> result = new HashMap<String, Object>();
  36. try {
  37. OAHireSalaryDataInfo info = execute(ctx, params);
  38. result.put("code", 200);
  39. result.put("message", "成功");
  40. result.put("number", info.getNumber());
  41. } catch (Exception e) {
  42. logger.error(e.getMessage(), e);
  43. result.put("code", 500);
  44. result.put("message", e.getMessage());
  45. result.put("number", "");
  46. }
  47. logger.error("结束执行 SaveOAHireSalaryData");
  48. return result;
  49. }
  50. private OAHireSalaryDataInfo execute(
  51. Context ctx,
  52. Map<String, Object> params
  53. ) throws EASBizException, BOSException {
  54. String idNumber = (String) params.get("idNumber");
  55. String passport = (String) params.get("passport");
  56. String oANumber = (String) params.get("oANumber");
  57. String insFundCity = (String) params.get("insFundCity");
  58. String socialLevel = (String) params.get("socialLevel");
  59. String insFundBase = (String) params.get("insFundBase");
  60. String salaryCalcType = (String) params.get("salaryCalcType");//计薪方式
  61. if (!StringExUtils.isAnyNotEmpty(idNumber, passport)) {
  62. throw new BOSException("身份证号码和其他证件号不能全为空!");
  63. }
  64. if (params.get("salaries") == null) {
  65. throw new BOSException("薪酬数据不能为空!");
  66. }
  67. if (!(params.get("salaries") instanceof List)) {
  68. throw new BOSException("薪酬数据 数据结构为List");
  69. }
  70. List<Map<String, Object>> salaries = (List) params.get("salaries");
  71. if (salaries.isEmpty()) {
  72. throw new BOSException("薪酬数据不能为空!");
  73. }
  74. if (StringUtils.isBlank(salaryCalcType)) {
  75. throw new BOSException("计薪方式编码不能为空!");
  76. }
  77. SalaryTypeEnum salaryTypeEnum = SalaryTypeEnum.getEnum(salaryCalcType);
  78. if (salaryTypeEnum == null) {
  79. throw new BOSException("计薪方式编码[" + salaryCalcType + "]不存在");
  80. }
  81. IOAHireSalaryData iOAHireSalaryData = OAHireSalaryDataFactory.getLocalInstance(ctx);
  82. IAdjustSalaryItem iAdjustSalaryItem = AdjustSalaryItemFactory.getLocalInstance(ctx);
  83. ICurrency iCurrency = CurrencyFactory.getLocalInstance(ctx);
  84. OAHireSalaryDataInfo info = iOAHireSalaryData.getOrCreateOAHireSalaryDataByIdNumber(idNumber, passport);
  85. ExecuteStateEnum executeStatus = info.getExecuteStatus();
  86. if (ExecuteStateEnum.SUCCESS.equals(executeStatus)) {
  87. throw new BOSException("数据已经存在且已经执行成功,不允许更新!");
  88. }
  89. OAHireSalaryDataEntryCollection entrys = info.getEntrys();
  90. entrys.clear();//清空分录
  91. info.setIdNumber(idNumber);//身份证号码
  92. info.setOaNumber(oANumber);//OA单据编号
  93. info.setPassport(passport);//其他证件号码
  94. info.setExecuteStatus(ExecuteStateEnum.UNEXECUTE);//状态未执行
  95. info.setSalaryCalcType(salaryTypeEnum);
  96. if (StringUtils.isNotBlank(insFundBase)) {
  97. info.setInsFundBase(new BigDecimal(insFundBase));
  98. }
  99. info.setInsFundCity(insFundCity);
  100. info.setSocialLevel(socialLevel);
  101. info.setExecuteResult(null);
  102. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  103. for (int i = 0; i < salaries.size(); i++) {
  104. Map<String, Object> salary = salaries.get(i);
  105. OAHireSalaryDataEntryInfo entryInfo = new OAHireSalaryDataEntryInfo();
  106. String moneyStr = (String) salary.get("money");
  107. if (StringUtils.isBlank(moneyStr)) {
  108. throw new BOSException("薪酬数据 金额不能为空!");
  109. }
  110. BigDecimal money = new BigDecimal(moneyStr);
  111. if (money.compareTo(BigDecimal.ZERO) < 0) {
  112. throw new BOSException("薪酬数据 金额不能小于0");
  113. }
  114. entryInfo.setMoney(money);
  115. String effectDate = (String) salary.get("effectDate");
  116. if (StringUtils.isNotBlank(effectDate)) {
  117. try {
  118. Date parse = sdf.parse(effectDate);
  119. entryInfo.setOAEffectDate(parse);
  120. } catch (ParseException e) {
  121. throw new BOSException("生效日期解析错误[" + effectDate + "],标准格式为yyyy-MM-dd");
  122. }
  123. }
  124. String currencyNumber = (String) salary.get("currencyNumber");
  125. if (StringUtils.isBlank(currencyNumber)) {
  126. currencyNumber = "CNY";
  127. }
  128. CurrencyCollection currencyCol = iCurrency
  129. .getCurrencyCollection("where number='" + currencyNumber + "'");
  130. if (currencyCol.isEmpty()) {
  131. throw new BOSException("薪酬数据 币别数据[" + currencyNumber + "]不存在");
  132. }
  133. entryInfo.setCurrency(currencyCol.get(0));
  134. //定薪项目
  135. String cmpItemNumber = (String) salary.get("cmpItemNumber");
  136. if (StringUtils.isBlank(cmpItemNumber)) {
  137. throw new BOSException("薪酬数据 调薪项目编码不能为空!");
  138. }
  139. AdjustSalaryItemCollection adjustSalaryItemCol =
  140. iAdjustSalaryItem.getAdjustSalaryItemCollection("where number='" + cmpItemNumber + "'");
  141. if (adjustSalaryItemCol.isEmpty()) {
  142. throw new BOSException("薪酬数据 定薪项目[" + cmpItemNumber + "]不存在");
  143. }
  144. entryInfo.setCmpItem(adjustSalaryItemCol.get(0));
  145. entrys.add(entryInfo);
  146. }
  147. //保存
  148. iOAHireSalaryData.save(info);
  149. return info;
  150. }
  151. }