PerfEvaluObjectListHandlerEx.java 50 KB

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