SaveEmpHireBizBillService.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. package com.kingdee.eas.custom.attendance.service;
  2. import com.aliyun.odps.utils.StringUtils;
  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.bos.dao.IObjectPK;
  7. import com.kingdee.bos.util.BOSUuid;
  8. import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
  9. import com.kingdee.eas.basedata.org.CtrlUnitInfo;
  10. import com.kingdee.eas.basedata.org.HROrgUnitInfo;
  11. import com.kingdee.eas.basedata.org.PositionInfo;
  12. import com.kingdee.eas.basedata.person.PersonCollection;
  13. import com.kingdee.eas.basedata.person.PersonFactory;
  14. import com.kingdee.eas.basedata.person.PersonInfo;
  15. import com.kingdee.eas.common.EASBizException;
  16. import com.kingdee.eas.hr.affair.EmpHireBizBillEntryCollection;
  17. import com.kingdee.eas.hr.affair.EmpHireBizBillEntryInfo;
  18. import com.kingdee.eas.hr.affair.EmpHireBizBillFactory;
  19. import com.kingdee.eas.hr.affair.EmpHireBizBillInfo;
  20. import com.kingdee.eas.hr.base.*;
  21. import com.kingdee.eas.hr.org.JobGradeFactory;
  22. import com.kingdee.eas.hr.org.JobGradeInfo;
  23. import com.kingdee.eas.util.app.DbUtil;
  24. import com.kingdee.jdbc.rowset.IRowSet;
  25. import com.kingdee.shr.ats.web.util.SHRBillUtil;
  26. import java.text.SimpleDateFormat;
  27. import java.util.Date;
  28. import java.util.HashMap;
  29. import java.util.Map;
  30. /**
  31. * 转正
  32. */
  33. public class SaveEmpHireBizBillService implements IHRMsfService {
  34. @Override
  35. public Object process(Context context, Map map) throws EASBizException, BOSException {
  36. System.out.println("SaveEmpHireBizBillServiceParam=" + map);
  37. Map<String, Object> result = new HashMap<String, Object>();
  38. try {
  39. //根组织
  40. String orgTop = "00000000-0000-0000-0000-000000000000CCE7AED4";
  41. StringBuilder errLog = new StringBuilder();
  42. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  43. String personNumber = (String) map.get("personNumber");//编码
  44. String bizDate = (String)map.get("bizDate");//转正日期
  45. //非必填
  46. String description = (String)map.get("description"); //备注
  47. String rankPosition = (String)map.get("rankPosition");//职位编码
  48. String employeeType = (String)map.get("employeeType");//用工类型编码
  49. String grade = (String)map.get("grade");//考核成绩
  50. String jobGrade = (String)map.get("jobGrade");//转正后职等编码
  51. String summary = (String)map.get("summary");//工作总结
  52. if (StringUtils.isBlank(personNumber)) {
  53. errLog.append("员工工号不能为空;");
  54. }
  55. if (StringUtils.isBlank(bizDate)) {
  56. errLog.append("转正日期不能为空;");
  57. }
  58. StringBuilder stringBuilder = new StringBuilder();
  59. stringBuilder.append(" /*dialect*/select pp.FCompanyID,pp.FPersonDep,pp.FPrimaryPositionID,isnull(pp.FEnterDate,p.FEFFDT) FEnterDate, ");
  60. stringBuilder.append(" p.FEmployeeTypeID,epr.FJobGradeID,er.FTryoutMonth,er.FPlanFormalDate ");
  61. stringBuilder.append(" from t_bd_person p ");
  62. stringBuilder.append(" left join T_HR_PERSONPOSITION pp on pp.fpersonid=p.fid ");
  63. stringBuilder.append(" left join T_HR_EmpPostRank epr on epr.FPersonID=p.fid and epr.fisLatest=1 ");
  64. stringBuilder.append(" left join T_HR_EmpLaborRelation er on er.FPersonID=p.fid and er.FlEFFDT = '2199-12-20' ");
  65. stringBuilder.append(" where p.Fnumber= ? ");
  66. IRowSet rs = DbUtil.executeQuery(context, stringBuilder.toString(),new Object[]{personNumber});
  67. //入职转正
  68. EmpHireBizBillInfo billInfo = new EmpHireBizBillInfo();
  69. billInfo.setBizDate(new Date());
  70. //制单人
  71. PersonInfo shrPerson = SHRBillUtil.getCurrPersonInfo();
  72. billInfo.setApplier(shrPerson);
  73. billInfo.setApplyDate(new Date());//申请日期
  74. //控制单元
  75. CtrlUnitInfo cu = new CtrlUnitInfo();
  76. //uuid生成规则
  77. cu.setId(BOSUuid.read(orgTop));
  78. billInfo.setCU(cu);
  79. //行政组织
  80. HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
  81. hrOrgUnitInfo.setId(BOSUuid.read(orgTop));
  82. billInfo.setHrOrgUnit(hrOrgUnitInfo);
  83. //转正单分录,集合
  84. EmpHireBizBillEntryInfo entry = new EmpHireBizBillEntryInfo();
  85. entry.setBill(billInfo);
  86. entry.setBizDate(simpleDateFormat.parse(bizDate));//转正日期
  87. //员工用工关系
  88. EmpLaborRelationInfo empLaborRelationInfo = null;
  89. PersonCollection personCollection = PersonFactory.getLocalInstance(context).getPersonCollection("where number='" + personNumber + "'");
  90. if (personCollection.size() > 0) {
  91. PersonInfo personInfo = personCollection.get(0);
  92. entry.setPerson(personInfo);
  93. EmpLaborRelationCollection empLaborRelationCollection = EmpLaborRelationFactory.getLocalInstance(context).getEmpLaborRelationCollection("where person='" + personInfo.getId() + "'");
  94. if (empLaborRelationCollection.size() > 0) {
  95. empLaborRelationInfo = empLaborRelationCollection.get(0);
  96. //获取用工关系状态
  97. EmployeeTypeInfo laborRelationState = empLaborRelationInfo.getLaborRelationState();
  98. //上一个用工关系状态
  99. empLaborRelationInfo.setLastLaborRelaState(laborRelationState);
  100. //EmployeeType ,用工关系状态,1正式员工
  101. EmployeeTypeInfo employeeTypeInfo = EmployeeTypeFactory.getLocalInstance(context).getEmployeeTypeInfo("where number='001'");
  102. //更新用工关系状态
  103. empLaborRelationInfo.setLaborRelationState(employeeTypeInfo);
  104. //实际转正时间
  105. empLaborRelationInfo.setActualFormalDate(simpleDateFormat.parse(bizDate));
  106. }
  107. }else {
  108. errLog.append("未找到员工工号为" + personNumber + "员工信息;");
  109. }
  110. if (StringUtils.isNotBlank(description)){
  111. entry.setDescription(description); //备注
  112. }
  113. //申请人员工
  114. if (rs.next()){
  115. //员工部门
  116. String depID = rs.getString("FPersonDep");
  117. //职位id
  118. String primaryPositionID = rs.getString("FPrimaryPositionID");
  119. //员工用工关系
  120. String employeeTypeID = rs.getString("FEmployeeTypeID");
  121. String companyID = rs.getString("FCompanyID");
  122. //入职时间
  123. Date enterDate = rs.getDate("FEnterDate");
  124. //职等
  125. String FJobGradeID = rs.getString("FJobGradeID");
  126. //预计转入时间
  127. Date FPlanFormalDate = rs.getDate("FPlanFormalDate");
  128. //试用期
  129. int FTryoutMonth = rs.getInt("FTryoutMonth");
  130. //预计转入时间
  131. entry.setPlanFormalDate(FPlanFormalDate);
  132. if (StringUtils.isNotBlank(depID)) { // 部门
  133. AdminOrgUnitInfo dep = new AdminOrgUnitInfo();
  134. dep.setId(BOSUuid.read(depID));
  135. billInfo.setAdminOrg(dep);
  136. entry.setAdminOrg(dep);
  137. entry.setOldAdminOrg(dep);
  138. }
  139. if (StringUtils.isNotBlank(primaryPositionID)) { // 职位
  140. PositionInfo positionInfo = new PositionInfo();
  141. positionInfo.setId(BOSUuid.read(primaryPositionID));
  142. entry.setPosition(positionInfo);
  143. entry.setOldPosition(positionInfo);
  144. }
  145. if (StringUtils.isNotBlank(FJobGradeID)) { // 职等
  146. JobGradeInfo jobGradeInfo = new JobGradeInfo();
  147. jobGradeInfo.setId(BOSUuid.read(FJobGradeID));
  148. entry.setOldJobGrade(jobGradeInfo);
  149. }
  150. //转正单分录,入职时间
  151. entry.setEnrollDate(enterDate);
  152. //转正单分录,试用期
  153. entry.setProbation(FTryoutMonth);
  154. //单据分录序列号
  155. entry.setSeq(1);
  156. //行政组织单元
  157. AdminOrgUnitInfo company = new AdminOrgUnitInfo();
  158. //id
  159. company.setId(BOSUuid.read(companyID));
  160. //变动前公司
  161. entry.setOldCompany(company);
  162. //员工任职
  163. if (StringUtils.isNotBlank(employeeTypeID)) {
  164. EmployeeTypeInfo oldEmployeeType = new EmployeeTypeInfo();
  165. oldEmployeeType.setId(BOSUuid.read(employeeTypeID));
  166. entry.setOldEmpType(oldEmployeeType);
  167. }
  168. }
  169. if (StringUtils.isNotBlank(rankPosition)) {
  170. PositionInfo positionInfo = new PositionInfo();
  171. positionInfo.setId(BOSUuid.read(rankPosition));
  172. entry.setPosition(positionInfo);//职位编码
  173. }
  174. if (StringUtils.isBlank(employeeType)) { //用工类型编码
  175. employeeType = "001";
  176. }
  177. EmployeeTypeInfo employeeTypeInfo = EmployeeTypeFactory.getLocalInstance(context).getEmployeeTypeInfo("where number='" + employeeType + "'");
  178. entry.setEmpType(employeeTypeInfo);
  179. if (StringUtils.isNotBlank(grade)) { //考核成绩
  180. entry.setGrade(grade);
  181. }
  182. if (StringUtils.isNotBlank(jobGrade)) { //转正后职等编码
  183. //职等
  184. JobGradeInfo jobGradeInfo = JobGradeFactory.getLocalInstance(context).getJobGradeInfo("where number='" + jobGrade + "'");
  185. entry.setJobGrade(jobGradeInfo);
  186. }
  187. if (StringUtils.isNotBlank(summary)) {
  188. entry.setSummary(summary); //工作总结
  189. }
  190. //变动操作编码(非必填)
  191. String defineInfoNumber = (String)map.get("defineInfoNumber");
  192. if (StringUtils.isBlank(defineInfoNumber)) {
  193. defineInfoNumber = "SHR03";
  194. }
  195. //单据业务配置,默认转正
  196. HRBizDefineInfo hrBizDefineInfo = HRBizDefineFactory.getLocalInstance(context).getHRBizDefineInfo("where number='" + defineInfoNumber + "'");
  197. entry.setHrBizDefine(hrBizDefineInfo);
  198. //变动类型编码(非必填)
  199. String actionReasonInfoNumber = (String)map.get("actionReasonInfoNumber");
  200. if (StringUtils.isBlank(actionReasonInfoNumber)) {
  201. actionReasonInfoNumber = "0302";
  202. }
  203. //变动类型,默认转正
  204. AffairActionReasonInfo actionReasonInfo = AffairActionReasonFactory.getLocalInstance(context).getAffairActionReasonInfo("where number='" + actionReasonInfoNumber + "'");
  205. entry.setAffairActionReason(actionReasonInfo);
  206. //单分录,行政组织
  207. entry.setEmployerUnit(hrOrgUnitInfo);
  208. //默认管理关系
  209. entry.setUseDefault(true);
  210. //单分录,hr组织
  211. entry.setHrOrgUnit(hrOrgUnitInfo);
  212. billInfo.getEntrys().add(entry);
  213. EmpHireBizBillFactory.getLocalInstance(context).submitEffect(billInfo);
  214. if (errLog.length() > 0) {
  215. result.put("msgType", "0");
  216. result.put("msg", errLog.toString());
  217. } else {
  218. // 入职转正 , 员工用工关系 , 单分录
  219. //String id = submitEffect(billInfo, empLaborRelationInfo, entryColl, context, uipk);
  220. result.put("msgType", "1");
  221. result.put("msg", "success");
  222. result.put("fnumber", billInfo.getNumber());
  223. }
  224. }catch (Exception e){
  225. e.printStackTrace();
  226. result.put("msgType", "0");
  227. result.put("msg", e.getMessage());
  228. }
  229. return result;
  230. }
  231. }