SaveResignBizBillService.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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.ResignBizBillEntryInfo;
  17. import com.kingdee.eas.hr.affair.ResignBizBillFactory;
  18. import com.kingdee.eas.hr.affair.ResignBizBillInfo;
  19. import com.kingdee.eas.hr.base.*;
  20. import com.kingdee.eas.util.app.DbUtil;
  21. import com.kingdee.jdbc.rowset.IRowSet;
  22. import com.kingdee.shr.ats.web.util.SHRBillUtil;
  23. import java.sql.Timestamp;
  24. import java.text.SimpleDateFormat;
  25. import java.util.Date;
  26. import java.util.HashMap;
  27. import java.util.Map;
  28. /**
  29. * 离职
  30. */
  31. public class SaveResignBizBillService implements IHRMsfService {
  32. @Override
  33. public Object process(Context context, Map map) throws EASBizException, BOSException {
  34. System.out.println("SaveResignBizBillService" + map);
  35. Map<String , Object> result = new HashMap<String,Object>();
  36. try {
  37. StringBuilder errLog = new StringBuilder();
  38. // 根节点
  39. String orgTop = "00000000-0000-0000-0000-000000000000CCE7AED4";
  40. // 必填
  41. String personNumber = (String)map.get("personNumber");
  42. String bizDate = (String) map.get("bizDate");//离职日期
  43. String leftCompanyDate = (String) map.get("leftCompanyDate");//最后工作日
  44. String forbidUserDate = (String) map.get("forbidUserDate");//禁用用户日期
  45. //非必填
  46. String description = (String)map.get("description");//备注
  47. String actionReasonInfoNumber = (String) map.get("actionReasonInfoNumber");//变动类型
  48. if(StringUtils.isBlank(personNumber)){
  49. errLog.append("员工工号不能为空;");
  50. }
  51. if(StringUtils.isBlank(bizDate)){
  52. errLog.append("离职日期不能为空!;");
  53. }
  54. if(StringUtils.isBlank(leftCompanyDate)){
  55. errLog.append("最后工作日不能为空;");
  56. }
  57. if (StringUtils.isBlank(forbidUserDate)){
  58. errLog.append("禁用用户日期不能为空;");
  59. }
  60. StringBuilder stringBuilder = new StringBuilder();
  61. stringBuilder.append(" /*dialect*/select pp.FCompanyID,pp.FPersonDep,pp.FPrimaryPositionID,isnull(pp.FEnterDate,p.FEFFDT) FEnterDate, ");
  62. stringBuilder.append(" p.FEmployeeTypeID ");
  63. stringBuilder.append(" from t_bd_person p ");
  64. stringBuilder.append(" left join T_HR_PERSONPOSITION pp on pp.fpersonid=p.fid ");
  65. stringBuilder.append(" where p.fnumber='" + personNumber + "'");
  66. IRowSet rs = DbUtil.executeQuery(context,stringBuilder.toString());
  67. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  68. SimpleDateFormat formatDateNum = new SimpleDateFormat("yyyyMMdd-SSS");
  69. // 离职单
  70. ResignBizBillInfo billInfo = new ResignBizBillInfo();
  71. // 业务时间(生成时间)
  72. billInfo.setBizDate(new Date());
  73. //制单人
  74. PersonInfo shrPerson = SHRBillUtil.getCurrPersonInfo();
  75. billInfo.setApplier(shrPerson);
  76. billInfo.setApplyDate(new Date());//申请日期
  77. // 管理单元
  78. CtrlUnitInfo cu = new CtrlUnitInfo();
  79. cu.setId(BOSUuid.read(orgTop));
  80. //控制单元
  81. billInfo.setCU(cu);
  82. //HR组织
  83. HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
  84. hrOrgUnitInfo.setId(BOSUuid.read(orgTop));
  85. billInfo.setHrOrgUnit(hrOrgUnitInfo);
  86. //离职单分录
  87. ResignBizBillEntryInfo entry = new ResignBizBillEntryInfo();
  88. //设置单据头
  89. entry.setBill(billInfo);
  90. entry.setEmpNumber(personNumber);
  91. //离职员工
  92. PersonCollection personCollection = PersonFactory.getLocalInstance(context).getPersonCollection("where number='" + personNumber + "'");
  93. if(personCollection.size() > 0){
  94. PersonInfo personInfo = personCollection.get(0);
  95. entry.setPerson(personInfo);
  96. }
  97. //离职日期
  98. entry.setBizDate(simpleDateFormat.parse(bizDate));
  99. String a = bizDate + " 00:00:00";
  100. entry.setBizTime(Timestamp.valueOf(a));
  101. if (StringUtils.isNotBlank(description)){
  102. entry.setDescription(description);//备注
  103. }
  104. if(rs.next()){
  105. // 所在部门
  106. String depID = rs.getString("FPersonDep");
  107. // 主要任职
  108. String primaryPositionID = rs.getString("FPrimaryPositionID");
  109. String companyID = rs.getString("FCompanyID");
  110. // 用户关系
  111. String employeeTypeID = rs.getString("FEmployeeTypeID");
  112. // 入职时间, 生效时间
  113. Date enterDate = rs.getDate("FEnterDate");
  114. if(StringUtils.isNotBlank(depID)) {
  115. // 行政组织单元
  116. AdminOrgUnitInfo dep = new AdminOrgUnitInfo();
  117. dep.setId(BOSUuid.read(depID));
  118. // 离职
  119. billInfo.setAdminOrg(dep);
  120. // 离职分录
  121. entry.setOldAdminOrg(dep);
  122. entry.setAdminOrg(dep);
  123. }
  124. //职位
  125. PositionInfo positionInfo = new PositionInfo();
  126. if(StringUtils.isNotBlank(primaryPositionID)){
  127. positionInfo.setId(BOSUuid.read(primaryPositionID));
  128. }
  129. // 分录
  130. entry.setOldPosition(positionInfo);
  131. entry.setPosition(positionInfo);
  132. if(StringUtils.isNotBlank(employeeTypeID)){
  133. EmployeeTypeInfo oldEmployeeType = new EmployeeTypeInfo();
  134. oldEmployeeType.setId(BOSUuid.read(employeeTypeID));
  135. entry.setOldEmpType(oldEmployeeType);
  136. }
  137. // 离职分录
  138. entry.setSeq(1); // 单据分录序列号
  139. entry.setEnterDate(enterDate); //入职时间
  140. //公司
  141. AdminOrgUnitInfo company = new AdminOrgUnitInfo();
  142. company.setId(BOSUuid.read(companyID));
  143. entry.setCompany(company);
  144. entry.setOldCompany(company);
  145. }else {
  146. errLog.append("未找到员工工号为" + personNumber + "的有效信息;");
  147. }
  148. // 单据业务配置 辞职
  149. HRBizDefineInfo defineInfo = new HRBizDefineInfo();
  150. defineInfo.setId(BOSUuid.read("DawAAAApViXmaL7Z"));
  151. //变动操作
  152. entry.setHrBizDefine(defineInfo);
  153. // 用工关系
  154. EmployeeTypeInfo employeeType = new EmployeeTypeInfo();
  155. //目标员工状态 离职
  156. employeeType.setId(BOSUuid.read("00000000-0000-0000-0000-000000000007A29E85B3"));
  157. entry.setEmpType(employeeType);
  158. if(StringUtils.isBlank(actionReasonInfoNumber)){
  159. // 变动类型 辞职
  160. AffairActionReasonInfo actionReasonInfo = new AffairActionReasonInfo();
  161. actionReasonInfo.setId(BOSUuid.read("+/Fqq82IQ2Cxm2PNypBkD5YRae4="));
  162. entry.setAffairActionReason(actionReasonInfo);
  163. }else{
  164. AffairActionReasonInfo affairActionReasonInfo = AffairActionReasonFactory.getLocalInstance(context).getAffairActionReasonInfo("where number='" + actionReasonInfoNumber + "'");
  165. entry.setAffairActionReason(affairActionReasonInfo);
  166. }
  167. //变动原因
  168. String variationReasonInfoNumber = (String) map.get("variationReasonInfoNumber");
  169. if(StringUtils.isBlank(variationReasonInfoNumber)){
  170. VariationReasonInfo variationReasonInfo = new VariationReasonInfo();
  171. variationReasonInfo.setId(BOSUuid.read("Y3K05Pu2QNiAxV/oBHXFUuas36w="));
  172. entry.setVariationReason(variationReasonInfo);
  173. }else{
  174. VariationReasonInfo variationReasonInfo = VariationReasonFactory.getLocalInstance(context).getVariationReasonInfo("where number='" + variationReasonInfoNumber + "'");
  175. entry.setVariationReason(variationReasonInfo);
  176. }
  177. // 用工单位
  178. entry.setEmployerUnit(hrOrgUnitInfo);
  179. entry.setUseDefault(true);//使用默认管理关系
  180. entry.setLeftCompanyDate(simpleDateFormat.parse(leftCompanyDate)); //最后工作日
  181. entry.setForbidUserDate(simpleDateFormat.parse(forbidUserDate)); //禁用用户日期
  182. billInfo.getEntrys().add(entry);
  183. ResignBizBillFactory.getLocalInstance(context).submitEffect(billInfo);
  184. if (errLog.length()>0){
  185. result.put("msgType","0");
  186. result.put("msg",errLog.toString());
  187. }else{
  188. result.put("msgType","1");
  189. result.put("msg","success");
  190. result.put("fnumber",billInfo.getNumber());
  191. }
  192. }catch (Exception e) {
  193. e.printStackTrace();
  194. result.put("msgType","0");
  195. result.put("msg",e.getMessage());
  196. }
  197. return result;
  198. }
  199. }