SaveEmpEnrollBizBillService.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  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.util.BOSUuid;
  7. import com.kingdee.eas.basedata.hraux.FolkFactory;
  8. import com.kingdee.eas.basedata.hraux.FolkInfo;
  9. import com.kingdee.eas.basedata.org.*;
  10. import com.kingdee.eas.basedata.person.Genders;
  11. import com.kingdee.eas.basedata.person.PersonCollection;
  12. import com.kingdee.eas.basedata.person.PersonFactory;
  13. import com.kingdee.eas.basedata.person.PersonInfo;
  14. import com.kingdee.eas.common.EASBizException;
  15. import com.kingdee.eas.hr.affair.*;
  16. import com.kingdee.eas.hr.base.*;
  17. import com.kingdee.eas.hr.emp.*;
  18. import com.kingdee.eas.hr.org.JobGradeInfo;
  19. import com.kingdee.eas.hr.org.JobLevelFactory;
  20. import com.kingdee.eas.hr.org.JobLevelInfo;
  21. import com.kingdee.shr.ats.web.util.SHRBillUtil;
  22. import jodd.util.StringUtil;
  23. import org.apache.log4j.Logger;
  24. import java.sql.Timestamp;
  25. import java.text.SimpleDateFormat;
  26. import java.time.LocalDate;
  27. import java.time.ZoneId;
  28. import java.util.Date;
  29. import java.util.HashMap;
  30. import java.util.Map;
  31. /**
  32. * 入职
  33. */
  34. public class SaveEmpEnrollBizBillService implements IHRMsfService {
  35. private static Logger logger = Logger.getLogger(SHRBillUtil.class);
  36. @Override
  37. public Object process(Context context, Map<String, Object> map) throws EASBizException, BOSException {
  38. Map<String, Object> result = new HashMap<String, Object>();
  39. StringBuilder errLog = new StringBuilder();
  40. try {
  41. System.out.println("SaveEmpEnrollBizBillService" + map);
  42. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  43. String orgTop = "00000000-0000-0000-0000-000000000000CCE7AED4";
  44. //必填
  45. String createPerson = (String)map.get("createPerson"); //申请人
  46. String personName = (String)map.get("personName"); //名称
  47. String gender = (String)map.get("gender"); // 性别
  48. String positionNumber = (String)map.get("position"); // 职位编码
  49. String telNum = (String)map.get("telNum"); //电话号码
  50. String personNumber = (String)map.get("personNumber"); //编码
  51. String bizDate = (String)map.get("bizData"); //入职日期 bizDate
  52. String oaUserName = (String)map.get("oaUserName"); //oa用户名
  53. //选填
  54. String idCard = (String)map.get("idCard"); // 身份证号码
  55. String passport = (String)map.get("passport"); // 护照号码
  56. String isEnrollAgain = (String)map.get("isEnrollAgain"); //是否在入职
  57. String oldNub = (String)map.get("oldNub"); //再次入职 原员工编码
  58. //非必填
  59. String createDate = (String)map.get("createDate"); //申请日期
  60. String jobLevelNumber = (String)map.get("jobLevelNumber"); //职级
  61. String empTypeNumber = (String)map.get("empType"); // 用工关系状态
  62. String cardAddress = (String)map.get("cardAddress"); // 身份证地址
  63. String probation = (String)map.get("probation"); // 试用月
  64. String affType = (String)map.get("affType"); // 变动类型
  65. String hrBizDefine = (String)map.get("hrBizDefine"); // 变动操作
  66. String varReason = (String)map.get("varReason"); // 变动原因
  67. String myFolk = (String)map.get("myFolk"); //民族
  68. String naPlace = (String)map.get("naPlace"); //籍贯
  69. String email = (String)map.get("email"); //电子邮件
  70. String jobStrDate = (String)map.get("jobStrDate"); //参加工作日期
  71. String globAlr = (String)map.get("globAlr"); //国际区号
  72. String description = (String)map.get("description"); //国际区号
  73. if (StringUtils.isBlank(createPerson)){
  74. errLog.append("申请人不能为空!");
  75. }
  76. if (StringUtils.isBlank(personName)){
  77. errLog.append("员工名称不能为空!");
  78. }
  79. if (StringUtils.isBlank(gender)){
  80. errLog.append("性别不能为空!");
  81. }
  82. if (StringUtils.isBlank(positionNumber)){
  83. errLog.append("职位编码不能为空!");
  84. }
  85. if (StringUtils.isBlank(telNum)){
  86. errLog.append("电话号码不能为空!");
  87. }
  88. if (StringUtils.isBlank(personNumber)){
  89. errLog.append("员工工号不能为空!");
  90. }
  91. if (StringUtils.isBlank(bizDate)){
  92. errLog.append("入职日期不能为空!");
  93. }
  94. if (StringUtils.isBlank(oaUserName)){
  95. errLog.append("oa用户名不能为空!");
  96. }
  97. if (StringUtils.isBlank(idCard) && StringUtils.isBlank(passport)){
  98. errLog.append("身份证号码和护照不能同时为空!");
  99. }
  100. if (StringUtils.isNotBlank(isEnrollAgain)){
  101. if (StringUtils.isBlank(oldNub)){
  102. errLog.append("再次入职时原员工工号不能为空!");
  103. }
  104. }
  105. if (errLog.length() >0 ){
  106. result.put("msgType", "0");
  107. result.put("msg", errLog.toString());
  108. }else {
  109. EmpEnrollBizBillInfo billInfo = new EmpEnrollBizBillInfo();
  110. //申请人工号
  111. PersonCollection presonCollection = PersonFactory.getLocalInstance(context).getPersonCollection("where number='" + createPerson + "'");
  112. if (presonCollection.size() > 0){
  113. PersonInfo personInfo = presonCollection.get(0);
  114. billInfo.setApplier(personInfo);
  115. }else {
  116. errLog.append("制单人工号为" + createPerson + "不存在;");
  117. }
  118. //管理单元
  119. CtrlUnitInfo cu = new CtrlUnitInfo();
  120. //uuid生成规则
  121. cu.setId(BOSUuid.read(orgTop));
  122. billInfo.setCU(cu);
  123. //hr组织
  124. HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
  125. hrOrgUnitInfo.setId(BOSUuid.read(orgTop));
  126. billInfo.setHrOrgUnit(hrOrgUnitInfo);
  127. billInfo.setBizDate(new Date()); //业务时间
  128. //入职单分录
  129. EmpEnrollBizBillEntryInfo entry = new EmpEnrollBizBillEntryInfo();
  130. entry.setBill(billInfo);
  131. entry.setEmpName(personName);//姓名
  132. entry.setEmpNumber(personNumber);//员工编码
  133. Genders anEnum = Genders.getEnum(Integer.parseInt(gender));
  134. entry.setGender(anEnum);//性别
  135. PositionCollection positionCollection = PositionFactory.getLocalInstance(context).getPositionCollection("where number = '" + positionNumber + "'");
  136. if (presonCollection.size() > 0){
  137. PositionInfo positionInfo = positionCollection.get(0);
  138. AdminOrgUnitInfo adminOrgUnit = positionInfo.getAdminOrgUnit();
  139. JobInfo job = positionInfo.getJob();
  140. entry.setPosition(positionInfo);//目标职位
  141. entry.setAdminOrg(adminOrgUnit);//目标组织
  142. entry.setJob(job);//职务
  143. entry.setReplaceAdminOrg(adminOrgUnit);//续存组织
  144. billInfo.setAdminOrg(adminOrgUnit); //行政组织
  145. }else {
  146. throw new Exception("入职职位编码" + positionNumber + "不存在;");
  147. }
  148. entry.setTelNum(telNum);//电话号码
  149. entry.setBizDate(simpleDateFormat.parse(bizDate));//生效日期
  150. entry.setEnrollDate(simpleDateFormat.parse(bizDate));//入职日期
  151. entry.put("oaUserName",oaUserName);
  152. if (StringUtils.isNotBlank(createDate)){
  153. billInfo.setApplyDate(simpleDateFormat.parse(createDate));//申请日期
  154. }else {
  155. billInfo.setApplyDate(new Date());
  156. }
  157. if (StringUtil.isNotBlank(jobLevelNumber)){
  158. JobLevelInfo jobLevelInfo = JobLevelFactory.getLocalInstance(context).getJobLevelInfo("where number = '" + jobLevelNumber + "'");
  159. JobGradeInfo jobGrade = jobLevelInfo.getJobGrade();
  160. entry.setJobLevel(jobLevelInfo);//目标职级
  161. entry.setJobGrade(jobGrade);//目标职等
  162. }
  163. if (StringUtils.isNotBlank(empTypeNumber)){ //用工关系状态
  164. empTypeNumber = "002";
  165. }
  166. EmployeeTypeInfo employeeTypeInfo = EmployeeTypeFactory.getLocalInstance(context).getEmployeeTypeInfo("where number = '" + empTypeNumber + "'");
  167. entry.setEmpType(employeeTypeInfo); //目标员工状态
  168. if (StringUtils.isNotBlank(idCard)){
  169. entry.setIDCardNo(idCard); //身份证
  170. }
  171. if (StringUtils.isNotBlank(passport)){
  172. entry.setPassportNo(passport);//护照号码
  173. }
  174. if (StringUtils.isNotBlank(cardAddress)){
  175. entry.setIdCardAddress(cardAddress); //身份证地址
  176. }
  177. if (StringUtils.isNotBlank(probation)){// 试用月
  178. entry.setProbation(Integer.parseInt(probation));
  179. LocalDate parse = LocalDate.parse(bizDate);
  180. LocalDate newDate = parse.plusMonths(Integer.parseInt(probation));
  181. Date from = Date.from(newDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
  182. entry.setPlanFormalDate(from);//预计转正日期
  183. }
  184. if (StringUtil.isNotBlank(isEnrollAgain)){
  185. if ("1".equals(isEnrollAgain)){
  186. entry.setEnrollAgain(false);// 是否再入职
  187. }else {
  188. entry.setEnrollAgain(true);// 是否再入职
  189. PersonCollection pCol = PersonFactory.getLocalInstance(context).getPersonCollection("where number='" + oldNub + "'");
  190. if (presonCollection.size() > 0){
  191. PersonInfo personInfo = pCol.get(0);
  192. PersonPositionInfo ppInfo = getAdminOrgUnitByPersonId(context, personInfo.getId().toString());
  193. PersonInfo person = ppInfo.getPerson();
  194. entry.setExistPersonID(person.getId());//再入职人员ID
  195. entry.setUseOldNumber(false);//再入职应用原员工编码
  196. entry.setOldEmpType(person.getEmployeeType());//原员工状态
  197. AdminOrgUnitInfo personDep = ppInfo.getPersonDep();
  198. entry.setOldAdminOrg(personDep);//原组织
  199. PositionInfo primaryPosition = ppInfo.getPrimaryPosition();
  200. entry.setOldPosition(primaryPosition);//原职位
  201. }else {
  202. errLog.append("再次入职原员工工号" + oldNub + "不存在;");
  203. }
  204. }
  205. }
  206. entry.setIsPrimary(true);//是否主要任职
  207. if (StringUtils.isBlank(affType)){
  208. affType = "0101";
  209. }
  210. AffairActionReasonInfo affairActionReasonInfo = AffairActionReasonFactory.getLocalInstance(context).getAffairActionReasonInfo("where number ='" + affType + "'");
  211. entry.setAffairActionReason(affairActionReasonInfo);//变动类型
  212. if (StringUtils.isBlank(hrBizDefine)){
  213. hrBizDefine = "SHR01";
  214. }
  215. HRBizDefineInfo hrBizDefineInfo = HRBizDefineFactory.getLocalInstance(context).getHRBizDefineInfo("where number ='" + hrBizDefine + "'");
  216. entry.setHrBizDefine(hrBizDefineInfo);// 变动操作
  217. if (StringUtils.isBlank(varReason)){
  218. varReason = "RZ08";
  219. }
  220. VariationReasonInfo variationReasonInfo = VariationReasonFactory.getLocalInstance(context).getVariationReasonInfo("where number ='" + varReason + "'");
  221. entry.setVariationReason(variationReasonInfo);// 变动原因
  222. if (StringUtils.isNotBlank(myFolk)){
  223. FolkInfo folkInfo = FolkFactory.getLocalInstance(context).getFolkInfo("where number ='" + myFolk + "'");
  224. entry.setMyFolk(folkInfo);//民族
  225. }
  226. if (StringUtils.isNotBlank(naPlace)){
  227. entry.setNativePlace(naPlace);//籍贯
  228. }
  229. if (StringUtils.isNotBlank(email)){
  230. entry.setEmail(email);//电子邮件
  231. }
  232. if (StringUtils.isNotBlank(jobStrDate)){
  233. entry.setJobStartDate(simpleDateFormat.parse(jobStrDate));//参加工作日期
  234. }
  235. entry.setEmployerUnit(hrOrgUnitInfo);//用工单位
  236. //entry.setCompany(hrOrgUnitInfo); //公司
  237. //entry.setHrBizDefine(hrBizDefineInfo);//HR组织
  238. entry.setIdCardLongEffect(true);//身份证是否长期有效
  239. entry.setNCell(telNum);
  240. entry.setGlobalRoaming(globAlr); //国际区号
  241. String a = bizDate + " 00:00:00";
  242. entry.setBizTime(Timestamp.valueOf(a));//生效日期(时区)
  243. billInfo.getEntrys().add(entry);
  244. EmpEnrollBizBillFactory.getLocalInstance(context).submitEffect(billInfo);
  245. result.put("msgType", "1");
  246. result.put("msg", "success");
  247. result.put("fnumber", billInfo.getNumber());
  248. }
  249. } catch (Exception e) {
  250. errLog.append(e.getMessage());
  251. result.put("msgType", "0");
  252. result.put("msg", errLog.toString());
  253. }
  254. return result;
  255. }
  256. public static PersonPositionInfo getAdminOrgUnitByPersonId(Context ctx, String personID) {
  257. if (personID == null) {
  258. return null;
  259. } else {
  260. PersonPositionInfo personPositionInfo = null;
  261. StringBuffer oqlb = new StringBuffer();
  262. oqlb.append("select ");
  263. oqlb.append("id,");
  264. oqlb.append("person.number,");
  265. oqlb.append("person.name,");
  266. oqlb.append("personDep.id,");
  267. oqlb.append("personDep.name,");
  268. oqlb.append("personDep.number,");
  269. oqlb.append("personDep.employeeType,");
  270. oqlb.append("personDep.longnumber,");
  271. oqlb.append("personDep.displayName,");
  272. oqlb.append("primaryPosition.id,");
  273. oqlb.append("primaryPosition.name,");
  274. oqlb.append("primaryPosition.number");
  275. oqlb.append(" where person.id='");
  276. oqlb.append(personID);
  277. oqlb.append("'");
  278. PersonPositionCollection c = null;
  279. try {
  280. c = PersonPositionFactory.getLocalInstance(ctx).getPersonPositionCollection(oqlb.toString());
  281. } catch (BOSException var6) {
  282. logger.error("SHRBillUtil.getAdminOrgUnit err", var6);
  283. }
  284. if (c != null && c.size() > 0) {
  285. personPositionInfo = c.get(0);
  286. }
  287. return personPositionInfo;
  288. }
  289. }
  290. }