PerfEvaluObjectListHandlerEx.java 54 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088
  1. package com.kingdee.eas.hr.perf.handler;
  2. import java.sql.SQLException;
  3. import java.sql.Timestamp;
  4. import java.util.Arrays;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.HashSet;
  8. import java.util.Map;
  9. import java.util.Set;
  10. import java.util.StringJoiner;
  11. import javax.ejb.ObjectNotFoundException;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;
  14. import com.kingdee.bos.dao.ormapping.ObjectReferedException;
  15. import com.kingdee.eas.framework.util.ExceptionMessageUtility;
  16. import com.kingdee.shr.base.syssetting.util.NetCtrlHelper;
  17. import com.kingdee.shr.perfweb.app.base.evalplan.*;
  18. import org.slf4j.Logger;
  19. import org.slf4j.LoggerFactory;
  20. import org.springframework.ui.ModelMap;
  21. import org.springframework.util.CollectionUtils;
  22. import com.google.common.collect.Sets;
  23. import com.kingdee.bos.BOSException;
  24. import com.kingdee.bos.Context;
  25. import com.kingdee.bos.ctrl.swing.StringUtils;
  26. import com.kingdee.bos.dao.IObjectPK;
  27. import com.kingdee.bos.dao.IObjectValue;
  28. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  29. import com.kingdee.bos.metadata.entity.EntityViewInfo;
  30. import com.kingdee.bos.metadata.entity.FilterInfo;
  31. import com.kingdee.bos.metadata.entity.FilterItemCollection;
  32. import com.kingdee.bos.metadata.entity.FilterItemInfo;
  33. import com.kingdee.bos.metadata.entity.SelectorItemCollection;
  34. import com.kingdee.bos.metadata.entity.SelectorItemInfo;
  35. import com.kingdee.bos.metadata.entity.SorterItemCollection;
  36. import com.kingdee.bos.metadata.query.util.CompareType;
  37. import com.kingdee.bos.sql.ParserException;
  38. import com.kingdee.bos.util.BOSUuid;
  39. import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
  40. import com.kingdee.eas.basedata.person.PersonInfo;
  41. import com.kingdee.eas.common.EASBizException;
  42. import com.kingdee.eas.framework.CoreBaseCollection;
  43. import com.kingdee.eas.hr.perf.utils.PerfEvaObjectUtils;
  44. import com.kingdee.eas.hr.project.IWorkHoursReportEntry;
  45. import com.kingdee.eas.hr.project.WorkHoursReportEntryCollection;
  46. import com.kingdee.eas.hr.project.WorkHoursReportEntryFactory;
  47. import com.kingdee.eas.hr.project.WorkHoursReportEntryInfo;
  48. import com.kingdee.eas.util.app.DbUtil;
  49. import com.kingdee.jdbc.rowset.IRowSet;
  50. import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody;
  51. import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader;
  52. import com.kingdee.shr.base.syssetting.context.SHRContext;
  53. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  54. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  55. import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
  56. import com.kingdee.shr.perfweb.app.base.evalfile.IPerfFile;
  57. import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileCollection;
  58. import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileFactory;
  59. import com.kingdee.shr.perfweb.app.base.evalfile.PerfFileInfo;
  60. import com.kingdee.shr.perfweb.app.base.evalrule.PWorkFlowDefCollection;
  61. import com.kingdee.shr.perfweb.app.base.evalrule.ScoringWayEnum;
  62. import com.kingdee.shr.perfweb.app.common.YesOrNoEnum;
  63. import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException;
  64. import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource;
  65. import com.kingdee.shr.perfweb.evaluplan.handler.PerfEvaluObjectListHandler;
  66. import com.kingdee.shr.perfweb.planexecute.handler.perfGoalsWorkListHandler;
  67. import com.kingdee.shr.perfweb.util.GetEntityInfoUtils;
  68. import com.kingdee.shr.perfweb.util.PerfRuleSettingUtil;
  69. import com.kingdee.shr.perfweb.util.PersonInchargeUtils;
  70. import com.kingdee.shr.perfweb.util.SHRPerfWebResourceUtil;
  71. import com.kingdee.shr.perfweb.utils.PerfPlanUtils;
  72. import com.kingdee.shr.perfweb.utils.RuleHistoryUtils;
  73. import com.kingdee.shr.perfweb.web.handler.base.CommonBatchListHandler;
  74. /**
  75. * @author qingwu
  76. * @date 2024/12/17
  77. * 员工考核计划-引入项目人员
  78. * @apiNote
  79. */
  80. public class PerfEvaluObjectListHandlerEx extends PerfEvaluObjectListHandler {
  81. //public class PerfEvaluObjectListHandlerEx extends ListHandler {
  82. private Context ctx = SHRContext.getInstance().getContext();
  83. private static Logger logger = LoggerFactory.getLogger(PerfEvaluObjectListHandlerEx.class);
  84. protected void setInitData(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, Map initData)
  85. throws SHRWebException {
  86. super.setInitData(request, response, modelMap, initData);
  87. Context ctx = SHRContext.getInstance().getContext();
  88. Map<String, Object> custom_params = (Map<String, Object>) initData.get("custom_params");
  89. //考核周期
  90. String perfPlanId = (String) custom_params.get("perfPlanId");
  91. String periodId = (String) custom_params.get("period");
  92. try {
  93. IPerfPlan iPerfPlan = PerfPlanFactory.getLocalInstance(ctx);
  94. PerfPlanInfo perfPlanInfo = iPerfPlan.getPerfPlanInfo(new ObjectUuidPK(perfPlanId));
  95. IObjectValue perobject = (IObjectValue) perfPlanInfo.get("perobjectId");
  96. initData.put("perobjectId", perobject);
  97. initData.put("fromPeriod", isFromPeriodAction(ctx, periodId));
  98. } catch (BOSException e) {
  99. throw new RuntimeException(e);
  100. } catch (EASBizException e) {
  101. throw new RuntimeException(e);
  102. }
  103. }
  104. public void addPerjectPersonAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws ShrWebBizException {
  105. logger.error("addPerjectPersonAction-----");
  106. String perfPlanId = request.getParameter("perfPlanId");//考核计划
  107. String period = request.getParameter("period");//考核周期
  108. try {
  109. IPerfPlan iPerfPlan = PerfPlanFactory.getLocalInstance(ctx);
  110. PerfPlanInfo perfPlanInfo = iPerfPlan.getPerfPlanInfo(new ObjectUuidPK(perfPlanId));
  111. IObjectValue perobject = (IObjectValue) perfPlanInfo.get("perobjectId");//项目id
  112. //String perobjectId = "kn9PaeD+TEK227/S8zjN6bFUids=";
  113. if (perobject == null) {
  114. throw new ShrWebBizException("未查询到关联项目!");
  115. }
  116. String perobjectId = perobject.get("id").toString();
  117. //获取项目工时启用的人员
  118. Set personSet = new HashSet();
  119. StringBuilder sb = new StringBuilder();
  120. //考核周期
  121. IPerfPeriod iPerfPeriod = PerfPeriodFactory.getLocalInstance(ctx);
  122. PerfPeriodInfo perfPeriodInfo = iPerfPeriod.getPerfPeriodInfo(new ObjectUuidPK(period));
  123. Date pStartDate = perfPeriodInfo.getPStartDate();//周期开始时间
  124. Date pEndDate = perfPeriodInfo.getPEndDate();//周期結束时间
  125. //查询项目工时分录周期内的数据
  126. IWorkHoursReportEntry iWorkHoursReportEntry = WorkHoursReportEntryFactory.getLocalInstance(ctx);
  127. SelectorItemCollection sic = new SelectorItemCollection();
  128. sic.add("*");
  129. sic.add("employee.*");
  130. sic.add("parent.*");
  131. sic.add("parent.adminOrg.*");
  132. FilterInfo filterInfo = new FilterInfo();
  133. FilterItemCollection filterItems = filterInfo.getFilterItems();
  134. filterItems.add(new FilterItemInfo("data", pStartDate, CompareType.GREATER_EQUALS));
  135. filterItems.add(new FilterItemInfo("data", pEndDate, CompareType.LESS_EQUALS));
  136. filterItems.add(new FilterItemInfo("parent.affiliatedProject", perobjectId, CompareType.EQUALS));
  137. filterItems.add(new FilterItemInfo("parent.billState", "3"));
  138. EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
  139. WorkHoursReportEntryCollection workHoursReportEntryCollection = iWorkHoursReportEntry.getWorkHoursReportEntryCollection(entityViewInfo);
  140. logger.error("workHoursReportEntryCollection--" + workHoursReportEntryCollection.size());
  141. if (workHoursReportEntryCollection.size() <= 0) {
  142. throw new ShrWebBizException("未查询到关联项目的人员!");
  143. }
  144. //人员 - 组织
  145. Map personOrAdminOrgMap = new HashMap();
  146. //获取项目工时人员
  147. for (int i = 0; i < workHoursReportEntryCollection.size(); i++) {
  148. WorkHoursReportEntryInfo workHoursReportEntryInfo = workHoursReportEntryCollection.get(i);
  149. //员工
  150. PersonInfo employee = workHoursReportEntryInfo.getEmployee();
  151. String personId = employee.getId().toString();
  152. personSet.add(personId);
  153. //获取人员对应组织
  154. AdminOrgUnitInfo adminOrg = workHoursReportEntryInfo.getParent().getAdminOrg();
  155. logger.error("adminOrg--" + adminOrg);
  156. if (adminOrg != null) {
  157. String adminOrgId = adminOrg.getId().toString();
  158. logger.error("adminOrgId--" + adminOrgId);
  159. personOrAdminOrgMap.put(personId, adminOrgId);
  160. sb.append(employee.getName()).append(",");
  161. }
  162. }
  163. if (sb.length() > 0) {
  164. sb = deleteCharAt(sb);
  165. }
  166. logger.error("personSet---" + personSet);
  167. logger.error("personOrAdminOrgMap---" + personOrAdminOrgMap);
  168. //获取员工档案
  169. Set perfFileSet = getPerfFileColl(ctx, personSet, sb, personOrAdminOrgMap);
  170. logger.error("perfFileSet---" + perfFileSet);
  171. //最后需要保存的员工绩效档案ID
  172. StringJoiner jperfFileJiner = new StringJoiner(",");
  173. for (Object perfFileId : perfFileSet) {
  174. jperfFileJiner.add(perfFileId.toString());
  175. }
  176. PerfPlanInfo info = null;
  177. try {
  178. info = PerfPlanFactory.getRemoteInstance().getPerfPlanInfo("where id = '" + perfPlanId + "'");
  179. } catch (Exception var10) {
  180. var10.printStackTrace();
  181. throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.GETPERFPLANERR)).getMessage());
  182. }
  183. PerfEvaObjectUtils perfEvaObjectUtils = new PerfEvaObjectUtils();
  184. IObjectPK[] iObjectPKS = perfEvaObjectUtils.addFromPerfFile(ctx, jperfFileJiner.toString(), period, "00000000-0000-0000-0000-000000000000CCE7AED4", info);
  185. Map res = new HashMap();
  186. res.put("perfFileSet", perfFileSet);
  187. res.put("jperfFileJiner", jperfFileJiner);
  188. res.put("iObjectPKS", iObjectPKS);
  189. JSONUtils.writeJson(response, res);
  190. } catch (Exception e) {
  191. e.printStackTrace();
  192. throw new ShrWebBizException(e);
  193. }
  194. }
  195. public StringBuilder deleteCharAt(StringBuilder sb) {
  196. if (sb.length() > 0) {
  197. sb.deleteCharAt(sb.lastIndexOf(","));
  198. }
  199. return sb;
  200. }
  201. /**
  202. * 获取员工档案
  203. *
  204. * @param ctx
  205. * @param personSet
  206. * @param sb
  207. * @return
  208. * @throws BOSException
  209. * @throws ShrWebBizException
  210. */
  211. public Set getPerfFileColl(Context ctx, Set personSet, StringBuilder sb, Map<String, String> personOrAdminOrgMap) throws BOSException, ShrWebBizException {
  212. //绩效考核档案 获取绩效档案id建立员工考核计划
  213. IPerfFile iPerfFile = PerfFileFactory.getLocalInstance(ctx);
  214. FilterInfo perfFileFilterInfo = new FilterInfo();
  215. perfFileFilterInfo.getFilterItems().add(new FilterItemInfo("person", personSet, CompareType.INCLUDE));
  216. perfFileFilterInfo.getFilterItems().add(new FilterItemInfo("state", "1"));
  217. EntityViewInfo perfFileEntityViewInfo = EntityViewInfo.getInstance(perfFileFilterInfo, null, null);
  218. PerfFileCollection perfFileCollection = iPerfFile.getPerfFileCollection(perfFileEntityViewInfo);
  219. logger.error("perfFileCollection.size--" + perfFileCollection.size());
  220. if (perfFileCollection.size() <= 0) {
  221. throw new ShrWebBizException("[" + sb.toString() + "]这些人员还未生成员工绩效档案,请维护!");
  222. }
  223. //员工档案人员
  224. Set perfFileSet = new HashSet();
  225. for (int i = 0; i < perfFileCollection.size(); i++) {
  226. PerfFileInfo perfFileInfo = perfFileCollection.get(i);
  227. //人员
  228. String personId = perfFileInfo.getPerson().getId().toString();
  229. //组织
  230. String adminOrgId = perfFileInfo.getAdminOrgUnit().getId().toString();
  231. logger.error("adminOrgId -- personId --" + adminOrgId + "--" + personId);
  232. //获取项目工时组织与绩效员工档案组织一样的数据
  233. if (personOrAdminOrgMap.containsKey(personId)) {
  234. if (adminOrgId.equals(personOrAdminOrgMap.get(personId))) {
  235. String perfFileId = perfFileInfo.getId().toString();
  236. perfFileSet.add(perfFileId);
  237. }
  238. }
  239. }
  240. return perfFileSet;
  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. public PerfEvaObjectCollection getEvaluObjectById(String[] personId) {
  274. if (personId.length == 0) {
  275. return null;
  276. } else {
  277. HashSet<String> set = new HashSet();
  278. for(int i = 0; i < personId.length; ++i) {
  279. set.add(personId[i]);
  280. }
  281. FilterInfo filter = new FilterInfo();
  282. filter.getFilterItems().add(new FilterItemInfo("id", set, CompareType.INCLUDE));
  283. EntityViewInfo viewInfo = new EntityViewInfo();
  284. SelectorItemCollection sic = viewInfo.getSelector();
  285. sic.add(new SelectorItemInfo("*"));
  286. sic.add(new SelectorItemInfo("workFlow.*"));
  287. sic.add(new SelectorItemInfo("perfGoalsObject.*"));
  288. sic.add(new SelectorItemInfo("perfGoalsFillerObject.*"));
  289. viewInfo.setFilter(filter);
  290. viewInfo.setSelector(sic);
  291. SorterItemCollection sorterItemCollection = new SorterItemCollection();
  292. try {
  293. sorterItemCollection.getSorter().decode("order by perfGoalsObject.personName");
  294. } catch (ParserException var10) {
  295. logger.error(var10.toString());
  296. }
  297. viewInfo.setSorter(sorterItemCollection);
  298. PerfEvaObjectCollection coll = null;
  299. try {
  300. coll = PerfEvaObjectFactory.getRemoteInstance().getPerfEvaObjectCollection(viewInfo);
  301. } catch (BOSException var9) {
  302. logger.error(var9.toString());
  303. }
  304. return coll;
  305. }
  306. }
  307. public BatchMessageTipsHeader defaultAlterEvaWorkFlowAction(String billId) throws SHRWebException {
  308. CoreBaseCollection perfEvaObjColl = new CoreBaseCollection();
  309. if (org.apache.commons.lang.StringUtils.isEmpty(billId)) {
  310. throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.IDREQUIRED)).getMessage());
  311. } else {
  312. String[] ids = billId.split(",");
  313. int sucess = 0;
  314. int failure = 0;
  315. BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader();
  316. try {
  317. PerfEvaObjectCollection coll = this.getEvaluObjectById(billId.split(","));
  318. Set<String> sucessIds = new HashSet();
  319. IPerfEvaObject iService = null;
  320. iService = PerfEvaObjectFactory.getRemoteInstance();
  321. NetCtrlHelper.batchRequestObjIDForUpdate(Arrays.asList(ids));
  322. for(int i = 0; i < coll.size(); ++i) {
  323. PerfEvaObjectInfo info = coll.get(i);
  324. BatchMessageTipsBody body = new BatchMessageTipsBody();
  325. body.setId(info.getId().toString());
  326. if (!sucessIds.contains(info.getId().toString())) {
  327. sucessIds.add(info.getId().toString());
  328. try {
  329. info.put("workFlow", info.getWorkFlow().getId().toString());
  330. if (0 != info.getWorkFlowStatus().getValue()) {
  331. throw new BOSException(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.ALTERERRASEVALUSTARTED, this.ctx));
  332. }
  333. perfEvaObjColl.add(info);
  334. ++sucess;
  335. body.setMuitTipsState(Boolean.TRUE);
  336. body.setMuitTipsMessage(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OPERATESUCCESS, this.ctx));
  337. } catch (BOSException var29) {
  338. ++failure;
  339. body.setMuitTipsState(Boolean.FALSE);
  340. body.setMuitTipsMessage(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OPERATEFAILEDWITHSUFFIX, this.ctx, new Object[]{var29.getMessage()}));
  341. logger.error(var29.getMessage(), var29);
  342. } catch (Exception var30) {
  343. ++failure;
  344. body.setMuitTipsState(Boolean.FALSE);
  345. if (var30 instanceof com.kingdee.bos.dao.ObjectNotFoundException) {
  346. body.setMuitTipsMessage(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.DATADELETED, this.ctx));
  347. } else {
  348. body.setMuitTipsMessage(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OPERATEFAILED, this.ctx));
  349. }
  350. logger.error(var30.getMessage(), var30);
  351. }
  352. batchMessageTipsHeader.addResult(body);
  353. }
  354. }
  355. iService.updateBatchData(perfEvaObjColl);
  356. batchMessageTipsHeader.setBillId(billId);
  357. batchMessageTipsHeader.setFailureCount(failure);
  358. batchMessageTipsHeader.setSuccessCount(sucess);
  359. //JSONUtils.SUCCESS(batchMessageTipsHeader);
  360. } catch (ObjectReferedException var31) {
  361. String errorMessage = ExceptionMessageUtility.getMessage(var31);
  362. throw new ShrWebBizException(errorMessage, var31);
  363. } catch (Exception var32) {
  364. throw new SHRWebException(var32.getMessage(), var32);
  365. } finally {
  366. try {
  367. NetCtrlHelper.batchReleaseObjIDForUpdate(Arrays.asList(ids));
  368. } catch (BOSException var28) {
  369. logger.error(var28.getMessage(), var28);
  370. }
  371. }
  372. return batchMessageTipsHeader;
  373. }
  374. }
  375. public String isFromPeriodAction(Context ctx, String periodId)
  376. throws SHRWebException {
  377. //自动引用上期数据----------
  378. String fromPeriod = null;
  379. //1.首先查询是否有人-当前考核周期
  380. IRowSet set = null;
  381. try {
  382. set = DbUtil.executeQuery(ctx, "select * from T_EVA_PerfEvaObject where FPERIODID ='" + periodId + "'");
  383. if (set != null && set.size() > 0 && set.next()) {
  384. } else {
  385. fromPeriod = getFromPeriod(periodId);
  386. }
  387. return fromPeriod;
  388. } catch (BOSException | SQLException e) {
  389. e.printStackTrace();
  390. }
  391. return fromPeriod;
  392. }
  393. public String addFromPeriodAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
  394. throws SHRWebException {
  395. String customItems = request.getParameter("custom_params");
  396. Context ctx = SHRContext.getInstance().getContext();
  397. if (!StringUtils.isEmpty(customItems)) {
  398. Map map = JSONUtils.convertJsonToObject(ctx, customItems);
  399. logger.error("getListDataAction-map--" + map.toString());
  400. String periodId = map.get("periodId").toString();
  401. checkPeriod(periodId);
  402. String perfPlanId = request.getParameter("perfPlanId");
  403. String hrOrgUnit = request.getParameter("hrOrgId");
  404. String fromPeriod = null;
  405. //自动引用上期数据----------
  406. //1.首先查询是否有人-当前考核周期
  407. IRowSet set = null;
  408. try {
  409. fromPeriod = getFromPeriod(periodId);
  410. if (fromPeriod != null) {
  411. Map<String, String> mapRequest = new HashMap<String, String>();
  412. mapRequest.put("isUpdate", "1");
  413. mapRequest.put("isRefGroup", "1");
  414. mapRequest.put("isRefPersonIncharge", "1");
  415. mapRequest.put("isUpdateIndicator", "1");
  416. mapRequest.put("fromPeriod", fromPeriod);
  417. mapRequest.put("periodId", periodId);
  418. mapRequest.put("hrOrgUnit", hrOrgUnit);
  419. myAddFromPeriod(mapRequest, hrOrgUnit, request);
  420. return null;
  421. }
  422. } catch (BOSException | SQLException e) {
  423. e.printStackTrace();
  424. }
  425. }
  426. return null;
  427. }
  428. private void myAddFromPeriod(Map<String, String> mapRequest, String hrOrgUnit, HttpServletRequest request)
  429. throws SHRWebException {
  430. String isUpdate = mapRequest.get("isUpdate");
  431. String isRefGroup = mapRequest.get("isRefGroup");
  432. String isRefPersonIncharge = mapRequest.get("isRefPersonIncharge");
  433. String isUpdateIndicator = mapRequest.get("isUpdateIndicator");
  434. Map<String, PerfFileInfo> filemap = new HashMap();
  435. Set<String> set = new HashSet();
  436. String[] ids = null;
  437. String bePerdiodId = mapRequest.get("fromPeriod");
  438. String periodId = mapRequest.get("periodId");
  439. PerfEvaObjectCollection coll = this.getEvaObjectCollection(bePerdiodId, set);
  440. if (coll != null && coll.size() >= 1) {
  441. Boolean isOrg = coll.get(0).getIsOrg().getValue() == 1;
  442. CoreBaseCollection croeBase = new CoreBaseCollection();
  443. Map map = null;
  444. PerfPeriodInfo currentPeriodInfo = null;
  445. try {
  446. map = new HashMap();
  447. currentPeriodInfo = PerfPeriodFactory.getRemoteInstance()
  448. .getPerfPeriodInfo("select *, perfRule.scoringWay where id ='" + periodId + "'");
  449. if ("1".equals(isRefGroup)) {
  450. Map<String, Object> checkResult = PerfRuleSettingUtil.checkRuleData(
  451. currentPeriodInfo.getPerfRule().getId().toString(), "",
  452. currentPeriodInfo.getPerfPlan().getId().toString(), this.ctx);
  453. boolean flag = (Boolean) checkResult.get("result");
  454. if (!flag) {
  455. throw new ShrWebBizException((String) checkResult.get("msg"));
  456. }
  457. map = PerfEvaObjectFactory.getRemoteInstance().addNewAndGroup(bePerdiodId, periodId, set,
  458. isUpdateIndicator);
  459. }
  460. } catch (Exception var37) {
  461. logger.error("addFromPeriod refGroup error: " + var37);
  462. throw new ShrWebBizException(var37.getMessage());
  463. }
  464. try {
  465. PerfPeriodInfo perfPeriodInfo = GetEntityInfoUtils.getPerfPeriodInfo(this.ctx, bePerdiodId);
  466. String defaultWorkFlow = "";
  467. PWorkFlowDefCollection defaultWorkFlowColl = RuleHistoryUtils.getDefaultWorkFlow(this.ctx,
  468. currentPeriodInfo.getPerfRule().getId().toString());
  469. if (defaultWorkFlowColl != null && defaultWorkFlowColl.size() > 0) {
  470. defaultWorkFlow = defaultWorkFlowColl.get(0).getId().toString();
  471. }
  472. if (StringUtils.isEmpty(defaultWorkFlow) && perfPeriodInfo.getIsHistoryUpdate().getValue() == 1) {
  473. PerfPlanInfo perfPlanInfo = PerfPlanFactory.getRemoteInstance()
  474. .getPerfPlanInfo("where id = '" + perfPeriodInfo.getPerfPlan().getId().toString() + "'");
  475. if (perfPlanInfo.getDefaultWorkFlow() != null) {
  476. defaultWorkFlow = perfPlanInfo.getDefaultWorkFlow().getId().toString();
  477. }
  478. }
  479. if ("1".equals(isUpdate) && !isOrg) {
  480. filemap = this.getLastPerfFile(ids, hrOrgUnit, bePerdiodId);
  481. } else if ("1".equals(isUpdate) && isOrg) {
  482. this.getLastAdminHis(ids, coll, bePerdiodId);
  483. }
  484. HashMap<String, String> flowIdMap = RuleHistoryUtils.getFlowIdMap(this.ctx, bePerdiodId, periodId);
  485. HashMap<String, String> evaObjMap = new HashMap();
  486. new HashMap();
  487. ScoringWayEnum scoringWay = currentPeriodInfo.getPerfRule().getScoringWay();
  488. for (int i = 0; coll != null && i < coll.size(); ++i) {
  489. PerfEvaObjectInfo info = coll.get(i);
  490. if (info.getIsOrg().getValue() != 1 && "1".equals(isUpdate)
  491. && info.getPerfFile().getAssignType().getValue() == 1) {
  492. String personId = info.getPerson().getId().toString();
  493. PerfFileInfo perfFileInfo = (PerfFileInfo) ((Map) filemap).get(personId);
  494. if (perfFileInfo != null) {
  495. info.setPerfFile(perfFileInfo);
  496. info.setAdminOrgUnit(perfFileInfo.getAdminOrgUnit());
  497. }
  498. }
  499. BOSUuid bosUuid = BOSUuid.create("8188E78B");
  500. evaObjMap.put(info.getId().toString(), bosUuid.toString());
  501. info.setId(bosUuid);
  502. PerfGoalsObjectCollection pgoColl = info.getPerfGoalsObject();
  503. for (int j = 0; j < pgoColl.size(); ++j) {
  504. pgoColl.get(j).setPerfEvaObject(info);
  505. pgoColl.get(j).setId((BOSUuid) null);
  506. }
  507. PerfGoalsFillerObjectCollection perfGoalsFillerObject = info.getPerfGoalsFillerObject();
  508. for (int j = 0; j < perfGoalsFillerObject.size(); ++j) {
  509. perfGoalsFillerObject.get(j).setPerfEvaObject(info);
  510. perfGoalsFillerObject.get(j).setId((BOSUuid) null);
  511. }
  512. PerfEvaluAdminResponsorCollection perfResponsorObject = info.getResponsor();
  513. if (perfResponsorObject != null) {
  514. for (int j = 0; j < perfResponsorObject.size(); ++j) {
  515. perfResponsorObject.get(j).setEvaObj(info);
  516. perfResponsorObject.get(j).setId((BOSUuid) null);
  517. }
  518. }
  519. info.put("period", periodId);
  520. String soureGroupId;
  521. if ("1".equals(isRefGroup)) {
  522. soureGroupId = info.getBelongGroup();
  523. logger.error("the soureGroupId is: " + soureGroupId);
  524. logger.error("the groupMap is: " + map);
  525. if (map != null && ((Map) map).get(soureGroupId) != null) {
  526. logger.error("the map.get(soureGroupId) is: " + ((Map) map).get(soureGroupId));
  527. info.setBelongGroup((String) ((Map) map).get(soureGroupId));
  528. } else if (!StringUtils.isEmpty(soureGroupId)) {
  529. String oql = "where period = '" + periodId + "' and relatedGroup ='" + soureGroupId + "'";
  530. PerfGoalsGroupCollection goalsColl = PerfGoalsGroupFactory.getRemoteInstance()
  531. .getPerfGoalsGroupCollection(oql);
  532. if (goalsColl != null && goalsColl.size() > 0) {
  533. info.setBelongGroup(goalsColl.get(0).getId().toString());
  534. } else {
  535. info.setBelongGroup((String) null);
  536. }
  537. } else {
  538. info.setBelongGroup((String) null);
  539. }
  540. } else {
  541. info.setBelongGroup((String) null);
  542. }
  543. info.setPersonalGoalStatus(PerfEvaObjectPersonalGoalStatusEnum.UNESTABLISHED);
  544. info.setUnitGoalsStatus(PerfEvaObjectUnitGoalsStatusEnum.UNASSIGN);
  545. info.put("targetBackReason", (Object) null);
  546. info.setGoalsPercent("");
  547. info.setGoalsScore("");
  548. info.setSendedTime((Date) null);
  549. info.setSendTiming((Timestamp) null);
  550. info.setChangeTime((Date) null);
  551. info.setTaskSendStatus(PerfEvaObjectSendStatusEnum.UNSENT);
  552. info.setWorkFlowStatus(PerfEvaObjectWFStatusEnum.UNSTARTED);
  553. info.setScoreTaskStatus(ScoreTaskStatusEnum.UNSEND);
  554. soureGroupId = (String) flowIdMap.get(info.getWorkFlow().getId().toString());
  555. info.put("workFlow", soureGroupId == null ? defaultWorkFlow : soureGroupId);
  556. info.setTargetMakeSure(perfPeriodInfo.getPerfPlan().isTargetMakeSure() ? 1 : 0);
  557. if (!"1".equals(isRefPersonIncharge)) {
  558. info.setPersonInChargeType(
  559. PersonInchargeUtils.setSuperior2PersonInChargeType(info.getPersonInChargeType()));
  560. info.setPointPosition((String) null);
  561. info.put("personIncharge", new PerfEvaPersonInchargeCollection());
  562. } else {
  563. PerfEvaPersonInchargeCollection personIncharge = info.getPersonIncharge();
  564. if (personIncharge != null && personIncharge.size() > 0) {
  565. PerfEvaPersonInchargeCollection personInchargeTemp = new PerfEvaPersonInchargeCollection();
  566. for (int j = 0; j < personIncharge.size(); ++j) {
  567. PerfEvaPersonInchargeInfo personInchargeInfo = personIncharge.get(j);
  568. if ("0".equals(personInchargeInfo.getComefrom())) {
  569. personInchargeInfo.setEvaObj(info);
  570. personInchargeInfo.setId((BOSUuid) null);
  571. personInchargeTemp.add(personInchargeInfo);
  572. }
  573. }
  574. info.put("personIncharge", personInchargeTemp);
  575. }
  576. }
  577. croeBase.add(info);
  578. }
  579. RuleHistoryUtils.copyMatrixWork(this.ctx, evaObjMap, bePerdiodId, periodId);
  580. } catch (Exception var38) {
  581. logger.error("addFromPeriod error: " + var38);
  582. throw new ShrWebBizException(
  583. (new SHRPerfWebBizException(SHRPerfWebBizException.REFELASTPERFFILEERR)).getMessage());
  584. }
  585. runBatchSaveEvaObject(mapRequest, croeBase, request);
  586. } else {
  587. throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.REFERPERIODHASNOEVAOBJ)).getMessage());
  588. }
  589. }
  590. private PerfEvaObjectCollection getEvaObjectCollection(String period, Set<String> idSet) {
  591. FilterInfo filter = new FilterInfo();
  592. if (idSet.size() > 0) {
  593. filter.getFilterItems().add(new FilterItemInfo("id", idSet, CompareType.INCLUDE));
  594. } else {
  595. filter.getFilterItems().add(new FilterItemInfo("period", period, CompareType.EQUALS));
  596. }
  597. filter.getFilterItems().add(new FilterItemInfo("changeDealType", 100, CompareType.EQUALS));
  598. EntityViewInfo viewInfo = new EntityViewInfo();
  599. SelectorItemCollection sic = viewInfo.getSelector();
  600. sic.add(new SelectorItemInfo("*"));
  601. sic.add(new SelectorItemInfo("perfFile.*"));
  602. sic.add(new SelectorItemInfo("perfFile.person.number"));
  603. sic.add(new SelectorItemInfo("perfFile.person.id"));
  604. sic.add(new SelectorItemInfo("perfGoalsObject.*"));
  605. sic.add(new SelectorItemInfo("perfGoalsFillerObject.*"));
  606. sic.add(new SelectorItemInfo("responsor.*"));
  607. sic.add(new SelectorItemInfo("personIncharge.*"));
  608. sic.add(new SelectorItemInfo("person.number"));
  609. sic.add(new SelectorItemInfo("person.name"));
  610. viewInfo.setFilter(filter);
  611. viewInfo.setSelector(sic);
  612. new PerfEvaObjectCollection();
  613. try {
  614. PerfEvaObjectCollection coll = PerfEvaObjectFactory.getRemoteInstance().getPerfEvaObjectCollection(viewInfo);
  615. return coll;
  616. } catch (BOSException var8) {
  617. logger.error(var8.toString());
  618. return null;
  619. }
  620. }
  621. private Map<String, PerfFileInfo> getLastPerfFile(String[] ids, String hrOrgUnit, String bePerdiodId)
  622. throws BOSException, EASBizException {
  623. PerfEvaObjectCollection evaColl = this.getEvaObjs(ids, bePerdiodId);
  624. return this.getPersonLastFile(hrOrgUnit, evaColl);
  625. }
  626. private Map<String, PerfFileInfo> getPersonLastFile(String hrOrgUnit, PerfEvaObjectCollection evaColl)
  627. throws BOSException {
  628. Map<String, PerfFileInfo> map = new HashMap();
  629. Set<String> personSet = new HashSet();
  630. boolean isOrg = false;
  631. for (int i = 0; i < evaColl.size(); ++i) {
  632. PerfEvaObjectInfo info = evaColl.get(i);
  633. isOrg = info.getIsOrg().getValue() == 1;
  634. if (isOrg) {
  635. return map;
  636. }
  637. String personId = info.getPerson().getId().toString();
  638. if (info.getPerfFile().getAssignType().getValue() == 0) {
  639. map.put(personId, info.getPerfFile());
  640. } else {
  641. personSet.add(personId);
  642. }
  643. }
  644. FilterInfo filter = new FilterInfo();
  645. EntityViewInfo viewInfo = new EntityViewInfo();
  646. SelectorItemCollection sic = viewInfo.getSelector();
  647. FilterItemCollection filterItems = filter.getFilterItems();
  648. filterItems.add(new FilterItemInfo("person", personSet, CompareType.INCLUDE));
  649. filterItems.add(new FilterItemInfo("hrOrgUnit", hrOrgUnit, CompareType.EQUALS));
  650. filterItems.add(new FilterItemInfo("assignType", 1, CompareType.EQUALS));
  651. filterItems.add(new FilterItemInfo("state", 1));
  652. filterItems.add(new FilterItemInfo("assignType", 1, CompareType.EQUALS));
  653. sic.add(new SelectorItemInfo("*"));
  654. sic.add(new SelectorItemInfo("position.*"));
  655. SorterItemCollection sorterItemCollection = new SorterItemCollection();
  656. try {
  657. sorterItemCollection.getSorter().decode("order by CREATETIME DESC");
  658. } catch (ParserException var15) {
  659. logger.error(var15.toString());
  660. }
  661. viewInfo.setFilter(filter);
  662. viewInfo.setSorter(sorterItemCollection);
  663. PerfFileCollection coll = PerfFileFactory.getRemoteInstance().getPerfFileCollection(viewInfo);
  664. for (int i = 0; i < coll.size(); ++i) {
  665. PerfFileInfo perfFile = coll.get(i);
  666. if (perfFile.getState().getValue() == 1) {
  667. String personIdKey = perfFile.getPerson().getId().toString();
  668. if (map.get(personIdKey) == null) {
  669. map.put(personIdKey, perfFile);
  670. }
  671. }
  672. }
  673. return map;
  674. }
  675. protected String runBatchSaveEvaObject(Map<String, String> mapRequest, CoreBaseCollection croeBase, HttpServletRequest request)
  676. throws SHRWebException {
  677. CoreBaseCollection mycroeBase = new CoreBaseCollection();
  678. int sucess = 0;
  679. int failure = 0;
  680. String billId = "";
  681. BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader();
  682. Set set = this.getCurrentRequestAdminOrgRangeIdSet(request);
  683. try {
  684. Set<String> sucessIds = new HashSet();
  685. String periodId = mapRequest.get("periodId");
  686. String hrOrgUnit = mapRequest.get("hrOrgUnit");
  687. Map<String, String> verifyMap = new HashMap();
  688. Map<String, String> evaPlanNameMap = this.getPerfPlanName(periodId, hrOrgUnit);
  689. CoreBaseCollection addCoreColl = new CoreBaseCollection();
  690. int count = croeBase.size();
  691. int j = 1;
  692. Set<String> personIds = new HashSet();
  693. int i;
  694. PerfEvaObjectInfo info;
  695. for (i = 0; i < count; ++i) {
  696. info = (PerfEvaObjectInfo) croeBase.get(i);
  697. personIds.add(info.getPerson().getId().toString());
  698. if (j != 500 && i != count - 1) {
  699. ++j;
  700. } else {
  701. Map<String, String> tempMap = this.getEvaObject(periodId, hrOrgUnit, personIds);
  702. if (!CollectionUtils.isEmpty(tempMap)) {
  703. verifyMap.putAll(tempMap);
  704. }
  705. j = 1;
  706. personIds = new HashSet();
  707. }
  708. }
  709. for (i = 0; i < croeBase.size(); ++i) {
  710. info = (PerfEvaObjectInfo) croeBase.get(i);
  711. BatchMessageTipsBody body = new BatchMessageTipsBody();
  712. try {
  713. String id = info.getPerfFile().getId().toString();
  714. billId = billId + id + ",";
  715. body.setId(id);
  716. if (sucessIds.contains(id)) {
  717. continue;
  718. }
  719. sucessIds.add(id);
  720. if (!set.contains(info.getAdminOrgUnit().getId().toString()) && info.getPerfFile().isUseDefault()) {
  721. throw new BOSException(
  722. (new SHRPerfWebBizException(SHRPerfWebBizException.USERHASNOPERFFILEORGPERMISSION))
  723. .getMessage());
  724. }
  725. String key = info.getPerson().getNumber() + "_" + info.getPerson().getName() + "_"
  726. + info.getPerfFile().getPosition().getId().toString() + "_"
  727. + info.getPerfFile().getAssignType().getValue();
  728. if (!StringUtils.isEmpty((String) verifyMap.get(key))) {
  729. throw new BOSException((new SHRPerfWebBizException(SHRPerfWebBizException.EVAOBJALREADYADDED,
  730. new Object[]{evaPlanNameMap.get(verifyMap.get(key))})).getMessage());
  731. }
  732. addCoreColl.add(info);
  733. ++sucess;
  734. body.setMuitTipsState(Boolean.TRUE);
  735. body.setMuitTipsMessage(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OPERATESUCCESS, this.ctx));
  736. } catch (BOSException var22) {
  737. croeBase.removeObject(i);
  738. --i;
  739. ++failure;
  740. body.setMuitTipsState(Boolean.FALSE);
  741. body.setMuitTipsMessage(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OPERATEFAILEDWITHSUFFIX,
  742. this.ctx, new Object[]{var22.getMessage()}));
  743. logger.error(var22.getMessage(), var22);
  744. } catch (Exception var23) {
  745. croeBase.removeObject(i);
  746. --i;
  747. ++failure;
  748. body.setMuitTipsState(Boolean.FALSE);
  749. if (var23 instanceof ObjectNotFoundException) {
  750. body.setMuitTipsMessage(
  751. SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.DATADELETED, this.ctx));
  752. } else {
  753. body.setMuitTipsMessage(
  754. SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.OPERATEFAILED, this.ctx));
  755. }
  756. logger.error(var23.getMessage(), var23);
  757. }
  758. batchMessageTipsHeader.addResult(body);
  759. if (addCoreColl.size() == 100) {
  760. PerfEvaObjectFactory.getRemoteInstance().saveBatchData(addCoreColl);
  761. mycroeBase.addCollection(addCoreColl);
  762. addCoreColl.clear();
  763. }
  764. }
  765. if (addCoreColl.size() > 0) {
  766. PerfEvaObjectFactory.getRemoteInstance().saveBatchData(addCoreColl);
  767. mycroeBase.addCollection(addCoreColl);
  768. addCoreColl.clear();
  769. }
  770. batchMessageTipsHeader.setBillId(billId.substring(0, billId.length() - 1));
  771. batchMessageTipsHeader.setFailureCount(failure);
  772. batchMessageTipsHeader.setSuccessCount(sucess);
  773. if (sucess > 0) {
  774. PerfPlanUtils.writeRefStateForPerfPeriod(this.ctx, periodId, RefStatusEnum.REFERED);
  775. }
  776. // JSONUtils.SUCCESS(batchMessageTipsHeader);
  777. //添加人员后自动分组 设置考核关系
  778. mycroeBase = updateAbovePerfEvaObject(mycroeBase, "1", periodId);
  779. PerfEvaObjectFactory.getRemoteInstance().updateBatchData(mycroeBase);
  780. for (int k = 0; k < mycroeBase.size(); k++) {
  781. info = (PerfEvaObjectInfo) mycroeBase.get(k);
  782. logger.error("getBelongGroup" + info.getBelongGroup());
  783. }
  784. updateAbovePerfEvaObject(mycroeBase, "2", periodId);
  785. return null;
  786. } catch (Exception var24) {
  787. throw new SHRWebException(var24.getMessage(), var24);
  788. }
  789. }
  790. protected String runBatchSaveEvaObject(HttpServletRequest request, CoreBaseCollection croeBase)
  791. throws SHRWebException {
  792. //添加人员后自动分组
  793. String addModel = request.getParameter("addModel");
  794. if ("0".equals(addModel)) { //单独添加人员
  795. String billId = this.getBillId(request);
  796. String[] ids = null;
  797. ids = billId.split(",");
  798. Set<String> set = new HashSet();
  799. set.addAll(Arrays.asList(ids));
  800. if (set != null && set.size() > 0) {
  801. try {
  802. System.out.println("runBatchSaveEvaObject+11111" + croeBase.toString());
  803. updateAbovePerfEvaObject(croeBase, "1", null);
  804. } catch (BOSException e) {
  805. e.printStackTrace();
  806. } catch (SQLException e) {
  807. e.printStackTrace();
  808. } catch (EASBizException e) {
  809. e.printStackTrace();
  810. }
  811. }
  812. }
  813. String getStr = super.runBatchSaveEvaObject(request, croeBase);
  814. //设置考核关系
  815. if ("0".equals(addModel)) { //单独添加人员
  816. try {
  817. updateAbovePerfEvaObject(croeBase, "2", null);
  818. } catch (EASBizException e) {
  819. e.printStackTrace();
  820. } catch (BOSException e) {
  821. e.printStackTrace();
  822. } catch (SQLException e) {
  823. e.printStackTrace();
  824. }
  825. }
  826. try {
  827. int count = croeBase.size();
  828. for (int i = 0; i < count; ++i) {
  829. PerfEvaObjectInfo info = (PerfEvaObjectInfo) croeBase.get(i);
  830. defaultAlterEvaWorkFlowAction(info.getId().toString());
  831. }
  832. }catch (Exception e){
  833. e.printStackTrace();
  834. }
  835. return getStr;
  836. }
  837. /**
  838. * 上一期分组和考核关系
  839. *
  840. * @param periodId
  841. * @return
  842. * @throws SQLException
  843. * @throws BOSException
  844. * @throws EASBizException
  845. */
  846. private CoreBaseCollection updateAbovePerfEvaObject(CoreBaseCollection croeBase, String type, String periodId) throws BOSException, SQLException, EASBizException {
  847. PerfEvaObjectInfo info = null;
  848. String fromPeriod = null;
  849. IRowSet set = null;
  850. String FBELONGGROUP = null;
  851. String getperiodId = null;
  852. for (int i = 0; i < croeBase.size(); ++i) {
  853. info = (PerfEvaObjectInfo) croeBase.get(i);
  854. if (info.get("period") != null && info.get("period").toString() != null) {
  855. getperiodId = info.get("period").toString();
  856. } else {
  857. getperiodId = periodId == null ? info.getPeriod().getId().toString() : periodId;
  858. }
  859. if (fromPeriod == null) {
  860. fromPeriod = getFromPeriod(getperiodId);
  861. }
  862. System.out.println("updateAbovePerfEvaObject+22222" + fromPeriod);
  863. if (fromPeriod != null) {
  864. if (type.equals("1")) {
  865. StringBuffer sb = new StringBuffer();
  866. sb.append("SELECT t1.fid FBELONGGROUP,t.FISSUPERIOR FISSUPERIOR");
  867. sb.append(",t.FISSELF FISSELF,t.FGOALSPERCENT FGOALSPERCENT,FPERSONINCHARGEPOSITIONID FPERSONINCHARGEPOSITIONID"
  868. + ",FPERSONINCHARGETYPEID FPERSONINCHARGETYPEID FROM T_EVA_PerfEvaObject t ");
  869. sb.append(" inner join T_EVA_PerfGoalsGroup T1 on T1.FRELATEDGROUPID = t.FBELONGGROUP");
  870. sb.append(" where t.FPERIODID = '" + fromPeriod + "' and T1.FPERIODID = '" + getperiodId + "'");
  871. sb.append(" and t.FPERSONID ='" + info.getPerson().getId().toString() + "' ");
  872. sb.append(" and t.FBELONGGROUP is not null");
  873. // System.out.println("ppinfo"+sb.toString());
  874. set = DbUtil.executeQuery(ctx, sb.toString());
  875. //如果有上一期的分组则
  876. if (set != null && set.size() > 0 && set.next()) {
  877. FBELONGGROUP = set.getString("FBELONGGROUP");
  878. info.setBelongGroup(FBELONGGROUP);
  879. info.setIsSuperior(set.getInt("FISSUPERIOR") == 1 ? YesOrNoEnum.YES : YesOrNoEnum.NO);
  880. info.setIsSelf(set.getInt("FISSELF") == 1 ? YesOrNoEnum.YES : YesOrNoEnum.NO);
  881. info.setGoalsPercent(set.getString("FGOALSPERCENT"));
  882. info.setPersonalGoalStatus(PerfEvaObjectPersonalGoalStatusEnum.UNESTABLISHED);
  883. info.setUnitGoalsStatus(PerfEvaObjectUnitGoalsStatusEnum.UNASSIGN);
  884. info.setPersonInchargePosition(set.getString("FPERSONINCHARGEPOSITIONID"));
  885. info.setPersonInChargeType(set.getString("FPERSONINCHARGETYPEID"));
  886. info.setWorkFlowStatus(PerfEvaObjectWFStatusEnum.UNSTARTED);
  887. info.setSendType(SendTypeEnum.HANDWORK);
  888. info.setIsSendEmail(YesOrNoEnum.NO);
  889. } else {
  890. info.setPersonalGoalStatus(PerfEvaObjectPersonalGoalStatusEnum.UNESTABLISHED);
  891. info.setWorkFlowStatus(PerfEvaObjectWFStatusEnum.UNSTARTED);
  892. info.setSendType(SendTypeEnum.HANDWORK);
  893. info.setIsSendEmail(YesOrNoEnum.NO);
  894. }
  895. }
  896. //如果有考核关系则
  897. if (info != null && info.size() > 0 && info.getId() != null && type.equals("2")) {
  898. String getSql = "SELECT fid FROM T_EVA_PerfEvaObject where FPERIODID = '" + fromPeriod + "' and FPERSONID ='" + info.getPerson().getId().toString() + "' ";
  899. System.out.println("getSql:" + getSql);
  900. //考核关系
  901. PerfEvaObjRelationObjectInfo reInfo = null;
  902. PerfEvaObjRelationObjectCollection reColl =
  903. PerfEvaObjRelationObjectFactory.getLocalInstance(ctx).getPerfEvaObjRelationObjectCollection(" where id in("
  904. + "SELECT fid fid FROM T_EVA_PerfEvaObjRelationObject where FEVAOBJID "
  905. + "in (" + getSql + "))");
  906. if (reColl != null && reColl.size() > 0) {
  907. for (int j = 0; j < reColl.size(); j++) {
  908. reInfo = reColl.get(j);
  909. reInfo.setEvaObj(info);
  910. reInfo.setId(null);
  911. PerfEvaObjRelationObjectFactory.getLocalInstance(ctx).addnew(reInfo);
  912. }
  913. }
  914. //目标填报
  915. PerfGoalsFillerObjectInfo foInfo = null;
  916. PerfGoalsFillerObjectCollection foColl =
  917. PerfGoalsFillerObjectFactory.getLocalInstance(ctx).getPerfGoalsFillerObjectCollection(" where id in("
  918. + "SELECT fid fid FROM T_EVA_PerfGoalsFillerObject where FPERFEVAOBJECTID "
  919. + "in (" + getSql + "))");
  920. if (foColl != null && foColl.size() > 0) {
  921. for (int j = 0; j < foColl.size(); j++) {
  922. foInfo = foColl.get(j);
  923. foInfo.setPerfEvaObject(info);
  924. foInfo.setId(null);
  925. PerfGoalsFillerObjectFactory.getLocalInstance(ctx).addnew(foInfo);
  926. }
  927. }
  928. //目标下达
  929. PerfGoalsObjectInfo goInfo = null;
  930. PerfGoalsObjectCollection goColl =
  931. PerfGoalsObjectFactory.getLocalInstance(ctx).getPerfGoalsObjectCollection(" where id in("
  932. + "SELECT fid fid FROM T_EVA_PerfGoalsObject where FPERFEVAOBJECTID "
  933. + "in (" + getSql + "))");
  934. if (goColl != null && goColl.size() > 0) {
  935. System.out.println("goColl.size()" + goColl.size());
  936. System.out.println("goColl.toString" + goColl.toString());
  937. //当期的清理掉
  938. PerfGoalsObjectFactory.getLocalInstance(ctx).delete(" where id in("
  939. + "SELECT fid fid FROM T_EVA_PerfGoalsObject where FPERFEVAOBJECTID "
  940. + "in (SELECT fid FROM T_EVA_PerfEvaObject where fid = '" + info.getId().toString() + "'))");
  941. for (int j = 0; j < goColl.size(); j++) {
  942. goInfo = goColl.get(j);
  943. goInfo.setPerfEvaObject(info);
  944. goInfo.setId(null);
  945. PerfGoalsObjectFactory.getLocalInstance(ctx).addnew(goInfo);
  946. }
  947. }
  948. //考核责任人
  949. PerfEvaPersonInchargeInfo enInfo = null;
  950. PerfEvaPersonInchargeCollection enColl =
  951. PerfEvaPersonInchargeFactory.getLocalInstance(ctx).getPerfEvaPersonInchargeCollection(" where id in("
  952. + "SELECT fid fid FROM T_EVA_PerfEvaPersonIncharge where FEVAOBJID "
  953. + "in (" + getSql + "))");
  954. if (enColl != null && enColl.size() > 0) {
  955. System.out.println("enColl.size()" + enColl.size());
  956. System.out.println("enColl.toString" + enColl.toString());
  957. //当期的清理掉
  958. PerfEvaPersonInchargeFactory.getLocalInstance(ctx).delete(" where id in("
  959. + "SELECT fid fid FROM T_EVA_PerfEvaPersonIncharge where FEVAOBJID "
  960. + "in (SELECT fid FROM T_EVA_PerfEvaObject where fid = '" + info.getId().toString() + "'))");
  961. for (int j = 0; j < enColl.size(); j++) {
  962. enInfo = enColl.get(j);
  963. enInfo.setEvaObj(info);
  964. enInfo.setId(null);
  965. PerfEvaPersonInchargeFactory.getLocalInstance(ctx).addnew(enInfo);
  966. }
  967. }
  968. }
  969. // }
  970. }
  971. }
  972. return croeBase;
  973. }
  974. /**
  975. * 获取上一期期间id
  976. *
  977. * @return
  978. * @throws BOSException
  979. * @throws SQLException
  980. */
  981. private String getFromPeriod(String periodId) throws BOSException, SQLException {
  982. IRowSet set = null;
  983. String fromPeriod = null;
  984. set = DbUtil.executeQuery(ctx, "select fid fid from T_EVA_PerfPeriod where FPERFPLAN in (select FPERFPLAN from T_EVA_PerfPeriod where fid ='" + periodId + "')"
  985. + " and fid <> '" + periodId + "' "
  986. + " and FPSTARTDATE < (select FPENDDATE from T_EVA_PerfPeriod where fid ='" + periodId + "') "
  987. + " order by FPENDDATE desc");
  988. if (set != null && set.size() > 0 && set.next()) {
  989. fromPeriod = set.getString("fid");
  990. }
  991. set = DbUtil.executeQuery(ctx, "select fid from T_EVA_PerfEvaObject where FPERIODID ='" + fromPeriod + "'");
  992. if (set != null && set.size() > 0 && set.next()) {
  993. return fromPeriod;
  994. } else {
  995. fromPeriod = null;
  996. }
  997. return fromPeriod;
  998. }
  999. }