SaveOAHireSalaryData.java 8.7 KB

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