PerfEvaluObjectListHandlerEx.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package com.kingdee.eas.hr.perf.handler;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.bos.ctrl.swing.StringUtils;
  5. import com.kingdee.bos.dao.IObjectPK;
  6. import com.kingdee.bos.dao.IObjectValue;
  7. import com.kingdee.bos.dao.ObjectNotFoundException;
  8. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  9. import com.kingdee.bos.metadata.entity.*;
  10. import com.kingdee.bos.metadata.query.util.CompareType;
  11. import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
  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.framework.CoreBaseCollection;
  16. import com.kingdee.eas.hr.affair.EmpEnrollBizBillEntryCollection;
  17. import com.kingdee.eas.hr.affair.EmpEnrollBizBillEntryFactory;
  18. import com.kingdee.eas.hr.affair.EmpEnrollBizBillEntryInfo;
  19. import com.kingdee.eas.hr.affair.IEmpEnrollBizBillEntry;
  20. import com.kingdee.eas.hr.perf.utils.PerfEvaObjectUtils;
  21. import com.kingdee.eas.hr.project.*;
  22. import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody;
  23. import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader;
  24. import com.kingdee.shr.base.syssetting.context.SHRContext;
  25. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  26. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  27. import com.kingdee.shr.base.syssetting.util.LocaleUtils;
  28. import com.kingdee.shr.base.syssetting.web.handler.ListHandler;
  29. import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
  30. import com.kingdee.shr.perfweb.app.base.evalfile.IPerfFile;
  31. import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileCollection;
  32. import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileFactory;
  33. import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileInfo;
  34. import com.kingdee.shr.perfweb.app.base.evalplan.*;
  35. import com.kingdee.shr.perfweb.app.base.evalrule.PWorkFlowDefCollection;
  36. import com.kingdee.shr.perfweb.app.base.evalrule.PWorkFlowDefInfo;
  37. import com.kingdee.shr.perfweb.app.base.evalrule.PerformanceRuleInfo;
  38. import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException;
  39. import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource;
  40. import com.kingdee.shr.perfweb.evaluplan.handler.PerfEvaluObjectListHandler;
  41. import com.kingdee.shr.perfweb.util.PerfEvaObjGroupUtils;
  42. import com.kingdee.shr.perfweb.util.PerfRuleSettingUtil;
  43. import com.kingdee.shr.perfweb.util.PersonInchargeUtils;
  44. import com.kingdee.shr.perfweb.util.SHRPerfWebResourceUtil;
  45. import com.kingdee.shr.perfweb.utils.PerfPlanUtils;
  46. import com.kingdee.shr.perfweb.utils.RuleHistoryUtils;
  47. import org.slf4j.Logger;
  48. import org.slf4j.LoggerFactory;
  49. import org.springframework.ui.ModelMap;
  50. import org.springframework.util.CollectionUtils;
  51. import javax.servlet.http.HttpServletRequest;
  52. import javax.servlet.http.HttpServletResponse;
  53. import java.time.LocalDate;
  54. import java.time.Year;
  55. import java.util.*;
  56. /**
  57. * @author qingwu
  58. * @date 2024/12/17
  59. * 员工考核计划-引入项目人员
  60. * @apiNote
  61. */
  62. public class PerfEvaluObjectListHandlerEx extends PerfEvaluObjectListHandler {
  63. //public class PerfEvaluObjectListHandlerEx extends ListHandler {
  64. private Context ctx = SHRContext.getInstance().getContext();
  65. private static Logger logger = LoggerFactory.getLogger(PerfEvaluObjectListHandlerEx.class);
  66. public void addPerjectPersonAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws ShrWebBizException {
  67. logger.error("addPerjectPersonAction---");
  68. String perfPlanId = request.getParameter("perfPlanId");//考核计划
  69. String period = request.getParameter("period");//考核周期
  70. try {
  71. IPerfPlan iPerfPlan = PerfPlanFactory.getLocalInstance(ctx);
  72. PerfPlanInfo perfPlanInfo = iPerfPlan.getPerfPlanInfo(new ObjectUuidPK(perfPlanId));
  73. IObjectValue perobject = (IObjectValue) perfPlanInfo.get("perobjectId");//项目id
  74. //String perobjectId = "kn9PaeD+TEK227/S8zjN6bFUids=";
  75. if (perobject == null) {
  76. throw new ShrWebBizException("未查询到关联项目!");
  77. }
  78. String perobjectId = perobject.get("id").toString();
  79. //获取项目工时启用的人员
  80. Set personSet = new HashSet();
  81. StringBuilder sb = new StringBuilder();
  82. //考核周期
  83. IPerfPeriod iPerfPeriod = PerfPeriodFactory.getLocalInstance(ctx);
  84. PerfPeriodInfo perfPeriodInfo = iPerfPeriod.getPerfPeriodInfo(new ObjectUuidPK(period));
  85. Date pStartDate = perfPeriodInfo.getPStartDate();//周期开始时间
  86. Date pEndDate = perfPeriodInfo.getPEndDate();//周期結束时间
  87. //查询项目工时分录周期内的数据
  88. IWorkHoursReportEntry iWorkHoursReportEntry = WorkHoursReportEntryFactory.getLocalInstance(ctx);
  89. SelectorItemCollection sic = new SelectorItemCollection();
  90. sic.add("*");
  91. sic.add("employee.*");
  92. sic.add("parent.*");
  93. sic.add("parent.adminOrg.*");
  94. FilterInfo filterInfo = new FilterInfo();
  95. FilterItemCollection filterItems = filterInfo.getFilterItems();
  96. filterItems.add(new FilterItemInfo("data", pStartDate, CompareType.GREATER_EQUALS));
  97. filterItems.add(new FilterItemInfo("data", pEndDate, CompareType.LESS_EQUALS));
  98. filterItems.add(new FilterItemInfo("parent.affiliatedProject", perobjectId, CompareType.EQUALS));
  99. filterItems.add(new FilterItemInfo("parent.billState", "3"));
  100. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
  101. WorkHoursReportEntryCollection workHoursReportEntryCollection = iWorkHoursReportEntry.getWorkHoursReportEntryCollection(entityViewInfo);
  102. logger.error("workHoursReportEntryCollection--" + workHoursReportEntryCollection.size());
  103. if (workHoursReportEntryCollection.size() <= 0) {
  104. throw new ShrWebBizException("未查询到关联项目的人员!");
  105. }
  106. //人员 - 组织
  107. Map personOrAdminOrgMap = new HashMap();
  108. //获取项目工时人员
  109. for (int i = 0; i < workHoursReportEntryCollection.size(); i++) {
  110. WorkHoursReportEntryInfo workHoursReportEntryInfo = workHoursReportEntryCollection.get(i);
  111. //员工
  112. PersonInfo employee = workHoursReportEntryInfo.getEmployee();
  113. String personId = employee.getId().toString();
  114. personSet.add(personId);
  115. //获取人员对应组织
  116. AdminOrgUnitInfo adminOrg = workHoursReportEntryInfo.getParent().getAdminOrg();
  117. logger.error("adminOrg--" + adminOrg);
  118. if (adminOrg != null) {
  119. String adminOrgId = adminOrg.getId().toString();
  120. logger.error("adminOrgId--" + adminOrgId);
  121. personOrAdminOrgMap.put(personId, adminOrgId);
  122. sb.append(employee.getName()).append(",");
  123. }
  124. }
  125. if (sb.length() > 0) {
  126. sb = deleteCharAt(sb);
  127. }
  128. logger.error("personSet---" + personSet);
  129. logger.error("personOrAdminOrgMap---" + personOrAdminOrgMap);
  130. //获取员工档案
  131. Set perfFileSet = getPerfFileColl(ctx, personSet, sb, personOrAdminOrgMap);
  132. logger.error("perfFileSet---" + perfFileSet);
  133. //最后需要保存的员工绩效档案ID
  134. StringJoiner jperfFileJiner = new StringJoiner(",");
  135. for (Object perfFileId : perfFileSet) {
  136. jperfFileJiner.add(perfFileId.toString());
  137. }
  138. PerfPlanInfo info = null;
  139. try {
  140. info = PerfPlanFactory.getRemoteInstance().getPerfPlanInfo("where id = '" + perfPlanId + "'");
  141. } catch (Exception var10) {
  142. var10.printStackTrace();
  143. throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.GETPERFPLANERR)).getMessage());
  144. }
  145. PerfEvaObjectUtils perfEvaObjectUtils = new PerfEvaObjectUtils();
  146. perfEvaObjectUtils.addFromPerfFile(ctx, jperfFileJiner.toString(), period, "00000000-0000-0000-0000-000000000000CCE7AED4", info);
  147. } catch (Exception e) {
  148. e.printStackTrace();
  149. throw new ShrWebBizException(e);
  150. }
  151. }
  152. public StringBuilder deleteCharAt(StringBuilder sb) {
  153. if (sb.length() > 0) {
  154. sb.deleteCharAt(sb.lastIndexOf(","));
  155. }
  156. return sb;
  157. }
  158. /**
  159. * 获取员工档案
  160. *
  161. * @param ctx
  162. * @param personSet
  163. * @param sb
  164. * @return
  165. * @throws BOSException
  166. * @throws ShrWebBizException
  167. */
  168. public Set getPerfFileColl(Context ctx, Set personSet, StringBuilder sb, Map<String, String> personOrAdminOrgMap) throws BOSException, ShrWebBizException {
  169. //绩效考核档案 获取绩效档案id建立员工考核计划
  170. IPerfFile iPerfFile = PerfFileFactory.getLocalInstance(ctx);
  171. FilterInfo perfFileFilterInfo = new FilterInfo();
  172. perfFileFilterInfo.getFilterItems().add(new FilterItemInfo("person", personSet, CompareType.INCLUDE));
  173. perfFileFilterInfo.getFilterItems().add(new FilterItemInfo("state", "1"));
  174. EntityViewInfo perfFileEntityViewInfo = EntityViewInfo.getInstance(perfFileFilterInfo, null, null);
  175. PerfFileCollection perfFileCollection = iPerfFile.getPerfFileCollection(perfFileEntityViewInfo);
  176. logger.error("perfFileCollection.size--" + perfFileCollection.size());
  177. if (perfFileCollection.size() <= 0) {
  178. throw new ShrWebBizException("[" + sb.toString() + "]这些人员还未生成员工绩效档案,请维护!");
  179. }
  180. //员工档案人员
  181. Set perfFileSet = new HashSet();
  182. for (int i = 0; i < perfFileCollection.size(); i++) {
  183. PerfFileInfo perfFileInfo = perfFileCollection.get(i);
  184. //人员
  185. String personId = perfFileInfo.getPerson().getId().toString();
  186. //组织
  187. String adminOrgId = perfFileInfo.getAdminOrgUnit().getId().toString();
  188. logger.error("adminOrgId -- personId --" + adminOrgId + "--" + personId);
  189. //获取项目工时组织与绩效员工档案组织一样的数据
  190. if (personOrAdminOrgMap.containsKey(personId)) {
  191. if (adminOrgId.equals(personOrAdminOrgMap.get(personId))) {
  192. String perfFileId = perfFileInfo.getId().toString();
  193. perfFileSet.add(perfFileId);
  194. }
  195. }
  196. }
  197. return perfFileSet;
  198. }
  199. }