PerfEvaluObjectListHandlerEx.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. package com.kingdee.eas.hr.perf.handler;
  2. import com.google.common.collect.Sets;
  3. import com.kingdee.bos.BOSException;
  4. import com.kingdee.bos.Context;
  5. import com.kingdee.bos.ctrl.swing.StringUtils;
  6. import com.kingdee.bos.dao.IObjectPK;
  7. import com.kingdee.bos.dao.IObjectValue;
  8. import com.kingdee.bos.dao.ObjectNotFoundException;
  9. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  10. import com.kingdee.bos.metadata.entity.*;
  11. import com.kingdee.bos.metadata.query.util.CompareType;
  12. import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
  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.framework.CoreBaseCollection;
  17. import com.kingdee.eas.hr.affair.EmpEnrollBizBillEntryCollection;
  18. import com.kingdee.eas.hr.affair.EmpEnrollBizBillEntryFactory;
  19. import com.kingdee.eas.hr.affair.EmpEnrollBizBillEntryInfo;
  20. import com.kingdee.eas.hr.affair.IEmpEnrollBizBillEntry;
  21. import com.kingdee.eas.hr.perf.utils.PerfEvaObjectUtils;
  22. import com.kingdee.eas.hr.project.*;
  23. import com.kingdee.eas.util.app.DbUtil;
  24. import com.kingdee.jdbc.rowset.IRowSet;
  25. import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody;
  26. import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader;
  27. import com.kingdee.shr.base.syssetting.context.SHRContext;
  28. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  29. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  30. import com.kingdee.shr.base.syssetting.util.LocaleUtils;
  31. import com.kingdee.shr.base.syssetting.web.handler.ListHandler;
  32. import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
  33. import com.kingdee.shr.perfweb.app.base.evalfile.IPerfFile;
  34. import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileCollection;
  35. import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileFactory;
  36. import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileInfo;
  37. import com.kingdee.shr.perfweb.app.base.evalplan.*;
  38. import com.kingdee.shr.perfweb.app.base.evalrule.PWorkFlowDefCollection;
  39. import com.kingdee.shr.perfweb.app.base.evalrule.PWorkFlowDefInfo;
  40. import com.kingdee.shr.perfweb.app.base.evalrule.PerformanceRuleInfo;
  41. import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException;
  42. import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource;
  43. import com.kingdee.shr.perfweb.evaluplan.handler.PerfEvaluObjectListHandler;
  44. import com.kingdee.shr.perfweb.planexecute.handler.perfGoalsWorkListHandler;
  45. import com.kingdee.shr.perfweb.util.PerfEvaObjGroupUtils;
  46. import com.kingdee.shr.perfweb.util.PerfRuleSettingUtil;
  47. import com.kingdee.shr.perfweb.util.PersonInchargeUtils;
  48. import com.kingdee.shr.perfweb.util.SHRPerfWebResourceUtil;
  49. import com.kingdee.shr.perfweb.utils.PerfPlanUtils;
  50. import com.kingdee.shr.perfweb.utils.RuleHistoryUtils;
  51. import com.kingdee.shr.perfweb.web.handler.base.CommonBatchListHandler;
  52. import org.slf4j.Logger;
  53. import org.slf4j.LoggerFactory;
  54. import org.springframework.ui.ModelMap;
  55. import org.springframework.util.CollectionUtils;
  56. import javax.servlet.http.HttpServletRequest;
  57. import javax.servlet.http.HttpServletResponse;
  58. import java.time.LocalDate;
  59. import java.time.Year;
  60. import java.util.*;
  61. /**
  62. * @author qingwu
  63. * @date 2024/12/17
  64. * 员工考核计划-引入项目人员
  65. * @apiNote
  66. */
  67. public class PerfEvaluObjectListHandlerEx extends PerfEvaluObjectListHandler {
  68. //public class PerfEvaluObjectListHandlerEx extends ListHandler {
  69. private Context ctx = SHRContext.getInstance().getContext();
  70. private static Logger logger = LoggerFactory.getLogger(PerfEvaluObjectListHandlerEx.class);
  71. @Override
  72. protected void setInitData(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, Map<String, Object> initData) throws SHRWebException {
  73. super.setInitData(request, response, modelMap, initData);
  74. Context ctx = SHRContext.getInstance().getContext();
  75. Map<String, Object> custom_params = (Map<String, Object>) initData.get("custom_params");
  76. //考核周期
  77. String perfPlanId = (String) custom_params.get("perfPlanId");
  78. try {
  79. IPerfPlan iPerfPlan = PerfPlanFactory.getLocalInstance(ctx);
  80. PerfPlanInfo perfPlanInfo = iPerfPlan.getPerfPlanInfo(new ObjectUuidPK(perfPlanId));
  81. IObjectValue perobject = (IObjectValue) perfPlanInfo.get("perobjectId");//项目id
  82. initData.put("perobjectId", perobject);
  83. } catch (BOSException e) {
  84. throw new RuntimeException(e);
  85. } catch (EASBizException e) {
  86. throw new RuntimeException(e);
  87. }
  88. }
  89. /**
  90. * 引入项目考核人员
  91. *
  92. * @param request
  93. * @param response
  94. * @param modelMap
  95. * @throws ShrWebBizException
  96. */
  97. public void addPerjectPersonAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws ShrWebBizException {
  98. logger.error("addPerjectPersonAction---");
  99. String perfPlanId = request.getParameter("perfPlanId");//考核计划
  100. String period = request.getParameter("period");//考核周期
  101. try {
  102. IPerfPlan iPerfPlan = PerfPlanFactory.getLocalInstance(ctx);
  103. PerfPlanInfo perfPlanInfo = iPerfPlan.getPerfPlanInfo(new ObjectUuidPK(perfPlanId));
  104. IObjectValue perobject = (IObjectValue) perfPlanInfo.get("perobjectId");//项目id
  105. //String perobjectId = "kn9PaeD+TEK227/S8zjN6bFUids=";
  106. if (perobject == null) {
  107. throw new ShrWebBizException("未查询到关联项目!");
  108. }
  109. String perobjectId = perobject.get("id").toString();
  110. //获取项目工时启用的人员
  111. Set personSet = new HashSet();
  112. StringBuilder sb = new StringBuilder();
  113. //考核周期
  114. IPerfPeriod iPerfPeriod = PerfPeriodFactory.getLocalInstance(ctx);
  115. PerfPeriodInfo perfPeriodInfo = iPerfPeriod.getPerfPeriodInfo(new ObjectUuidPK(period));
  116. Date pStartDate = perfPeriodInfo.getPStartDate();//周期开始时间
  117. Date pEndDate = perfPeriodInfo.getPEndDate();//周期結束时间
  118. //查询项目工时分录周期内的数据
  119. IWorkHoursReportEntry iWorkHoursReportEntry = WorkHoursReportEntryFactory.getLocalInstance(ctx);
  120. SelectorItemCollection sic = new SelectorItemCollection();
  121. sic.add("*");
  122. sic.add("employee.*");
  123. sic.add("parent.*");
  124. sic.add("parent.adminOrg.*");
  125. FilterInfo filterInfo = new FilterInfo();
  126. FilterItemCollection filterItems = filterInfo.getFilterItems();
  127. filterItems.add(new FilterItemInfo("data", pStartDate, CompareType.GREATER_EQUALS));
  128. filterItems.add(new FilterItemInfo("data", pEndDate, CompareType.LESS_EQUALS));
  129. filterItems.add(new FilterItemInfo("parent.affiliatedProject", perobjectId, CompareType.EQUALS));
  130. filterItems.add(new FilterItemInfo("parent.billState", "3"));
  131. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
  132. WorkHoursReportEntryCollection workHoursReportEntryCollection = iWorkHoursReportEntry.getWorkHoursReportEntryCollection(entityViewInfo);
  133. logger.error("workHoursReportEntryCollection--" + workHoursReportEntryCollection.size());
  134. if (workHoursReportEntryCollection.size() <= 0) {
  135. throw new ShrWebBizException("未查询到关联项目的人员!");
  136. }
  137. //人员 - 组织
  138. Map personOrAdminOrgMap = new HashMap();
  139. //获取项目工时人员
  140. for (int i = 0; i < workHoursReportEntryCollection.size(); i++) {
  141. WorkHoursReportEntryInfo workHoursReportEntryInfo = workHoursReportEntryCollection.get(i);
  142. //员工
  143. PersonInfo employee = workHoursReportEntryInfo.getEmployee();
  144. String personId = employee.getId().toString();
  145. personSet.add(personId);
  146. //获取人员对应组织
  147. AdminOrgUnitInfo adminOrg = workHoursReportEntryInfo.getParent().getAdminOrg();
  148. logger.error("adminOrg--" + adminOrg);
  149. if (adminOrg != null) {
  150. String adminOrgId = adminOrg.getId().toString();
  151. logger.error("adminOrgId--" + adminOrgId);
  152. personOrAdminOrgMap.put(personId, adminOrgId);
  153. sb.append(employee.getName()).append(",");
  154. }
  155. }
  156. if (sb.length() > 0) {
  157. sb = deleteCharAt(sb);
  158. }
  159. logger.error("personSet---" + personSet);
  160. logger.error("personOrAdminOrgMap---" + personOrAdminOrgMap);
  161. //获取员工档案
  162. Set perfFileSet = getPerfFileColl(ctx, personSet, sb, personOrAdminOrgMap);
  163. logger.error("perfFileSet---" + perfFileSet);
  164. //最后需要保存的员工绩效档案ID
  165. StringJoiner jperfFileJiner = new StringJoiner(",");
  166. for (Object perfFileId : perfFileSet) {
  167. jperfFileJiner.add(perfFileId.toString());
  168. }
  169. PerfPlanInfo info = null;
  170. try {
  171. info = PerfPlanFactory.getRemoteInstance().getPerfPlanInfo("where id = '" + perfPlanId + "'");
  172. } catch (Exception var10) {
  173. var10.printStackTrace();
  174. throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.GETPERFPLANERR)).getMessage());
  175. }
  176. PerfEvaObjectUtils perfEvaObjectUtils = new PerfEvaObjectUtils();
  177. IObjectPK[] iObjectPKS = perfEvaObjectUtils.addFromPerfFile(ctx, jperfFileJiner.toString(), period, "00000000-0000-0000-0000-000000000000CCE7AED4", info);
  178. Map res = new HashMap();
  179. res.put("perfFileSet", perfFileSet);
  180. res.put("jperfFileJiner", jperfFileJiner);
  181. res.put("iObjectPKS", iObjectPKS);
  182. JSONUtils.writeJson(response, res);
  183. } catch (Exception e) {
  184. e.printStackTrace();
  185. throw new ShrWebBizException(e);
  186. }
  187. }
  188. public StringBuilder deleteCharAt(StringBuilder sb) {
  189. if (sb.length() > 0) {
  190. sb.deleteCharAt(sb.lastIndexOf(","));
  191. }
  192. return sb;
  193. }
  194. /**
  195. * 获取员工档案
  196. *
  197. * @param ctx
  198. * @param personSet
  199. * @param sb
  200. * @return
  201. * @throws BOSException
  202. * @throws ShrWebBizException
  203. */
  204. public Set getPerfFileColl(Context ctx, Set personSet, StringBuilder sb, Map<String, String> personOrAdminOrgMap) throws BOSException, ShrWebBizException {
  205. //绩效考核档案 获取绩效档案id建立员工考核计划
  206. IPerfFile iPerfFile = PerfFileFactory.getLocalInstance(ctx);
  207. FilterInfo perfFileFilterInfo = new FilterInfo();
  208. perfFileFilterInfo.getFilterItems().add(new FilterItemInfo("person", personSet, CompareType.INCLUDE));
  209. perfFileFilterInfo.getFilterItems().add(new FilterItemInfo("state", "1"));
  210. EntityViewInfo perfFileEntityViewInfo = EntityViewInfo.getInstance(perfFileFilterInfo, null, null);
  211. PerfFileCollection perfFileCollection = iPerfFile.getPerfFileCollection(perfFileEntityViewInfo);
  212. logger.error("perfFileCollection.size--" + perfFileCollection.size());
  213. if (perfFileCollection.size() <= 0) {
  214. throw new ShrWebBizException("[" + sb.toString() + "]这些人员还未生成员工绩效档案,请维护!");
  215. }
  216. //员工档案人员
  217. Set perfFileSet = new HashSet();
  218. for (int i = 0; i < perfFileCollection.size(); i++) {
  219. PerfFileInfo perfFileInfo = perfFileCollection.get(i);
  220. //人员
  221. String personId = perfFileInfo.getPerson().getId().toString();
  222. //组织
  223. String adminOrgId = perfFileInfo.getAdminOrgUnit().getId().toString();
  224. logger.error("adminOrgId -- personId --" + adminOrgId + "--" + personId);
  225. //获取项目工时组织与绩效员工档案组织一样的数据
  226. if (personOrAdminOrgMap.containsKey(personId)) {
  227. if (adminOrgId.equals(personOrAdminOrgMap.get(personId))) {
  228. String perfFileId = perfFileInfo.getId().toString();
  229. perfFileSet.add(perfFileId);
  230. }
  231. }
  232. }
  233. return perfFileSet;
  234. }
  235. /**
  236. * 设置考核关系校验
  237. * @param request
  238. * @param response
  239. * @param modelMap
  240. * @throws SHRWebException
  241. */
  242. public void checkCansetPerfRelationTypeAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
  243. perfGoalsWorkListHandler p = new perfGoalsWorkListHandler();
  244. p.checkCansetPerfRelationTypeAction(request,response,modelMap);
  245. }
  246. public void alterEvaWorkFlowAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException, EASBizException {
  247. Context ctx = SHRContext.getInstance().getContext();
  248. perfGoalsWorkListHandler p = new perfGoalsWorkListHandler();
  249. try {
  250. String billId = this.getDealIdStr(request);
  251. StringBuilder sql = new StringBuilder("select (fid||'$'||FWORKFLOWID) as wfid from T_EVA_PerfEvaObject where fid in(''");
  252. String[] billIds = billId.split(",");
  253. for (String id : billIds) {
  254. sql.append(",'");
  255. sql.append(id);
  256. sql.append("'");
  257. }
  258. sql.append(")");
  259. IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
  260. Set<String> list = Sets.newHashSet();
  261. while (rs.next()) {
  262. list.add(rs.getString("wfid"));
  263. }
  264. if (list.size()>0){
  265. String billid_wid = CommonBatchListHandler.joinStr(list);
  266. request.setAttribute("billId",billid_wid);
  267. }
  268. }catch (Exception e){
  269. e.printStackTrace();
  270. }
  271. p.alterEvaWorkFlowAction(request,response,modelMap,batchMessageTipsHeader);
  272. }
  273. }