EvaResultSummaryManagerListHandlerExEx.java 81 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581
  1. package com.kingdee.eas.hr.perf.handler;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.google.common.collect.Maps;
  5. import com.google.common.collect.Sets;
  6. import com.grapecity.documents.excel.O;
  7. import com.kingdee.bos.BOSException;
  8. import com.kingdee.bos.Context;
  9. import com.kingdee.bos.metadata.entity.*;
  10. import com.kingdee.bos.metadata.query.util.CompareType;
  11. import com.kingdee.bos.rabbitmq.guava.Lists;
  12. import com.kingdee.eas.common.EASBizException;
  13. import com.kingdee.eas.custom.performanceScoring.handler.EvaResultSummaryManagerListHandlerEx;
  14. import com.kingdee.eas.framework.CoreBaseCollection;
  15. import com.kingdee.eas.hr.perf.PerformProTeamCollection;
  16. import com.kingdee.eas.hr.perf.PerformProTeamFactory;
  17. import com.kingdee.eas.hr.perf.PersonPerformProCollection;
  18. import com.kingdee.eas.hr.perf.PersonPerformProFactory;
  19. import com.kingdee.eas.util.app.DbUtil;
  20. import com.kingdee.jdbc.rowset.IRowSet;
  21. import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader;
  22. import com.kingdee.shr.base.syssetting.context.SHRContext;
  23. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  24. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  25. import com.kingdee.shr.perfweb.app.base.evalplan.*;
  26. import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException;
  27. import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource;
  28. import com.kingdee.shr.perfweb.util.*;
  29. import com.kingdee.util.StringUtils;
  30. import org.slf4j.Logger;
  31. import org.slf4j.LoggerFactory;
  32. import org.springframework.ui.ModelMap;
  33. import org.springframework.util.CollectionUtils;
  34. import javax.servlet.http.HttpServletRequest;
  35. import javax.servlet.http.HttpServletResponse;
  36. import java.math.BigDecimal;
  37. import java.sql.SQLException;
  38. import java.text.SimpleDateFormat;
  39. import java.time.LocalDate;
  40. import java.time.format.DateTimeFormatter;
  41. import java.util.*;
  42. public class EvaResultSummaryManagerListHandlerExEx extends EvaResultSummaryManagerListHandlerEx {
  43. private static final Logger logger = LoggerFactory.getLogger(EvaResultSummaryManagerListHandlerExEx.class);
  44. public void batchSaveReviseDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
  45. Context ctx = SHRContext.getInstance().getContext();
  46. List unValidIds;
  47. try {
  48. unValidIds = EvaResultSummaryBillUtil.validEvaResultSummaryBill(ctx, (String)null, request.getParameter("billId"), "10");
  49. if (unValidIds.size() > 0) {
  50. addBatchMessageTips(unValidIds, SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.CANNOTENTRYREVISEBYBILLSTATE, ctx), batchMessageTipsHeader);
  51. }
  52. } catch (BOSException var12) {
  53. logger.error("【PERFWEB--batchSaveReviseDataAction】-it is failed to get state of summary bill,e=", var12);
  54. throw new ShrWebBizException(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.CANNOTENTRYREVISEBYBILLSTATE, ctx));
  55. }
  56. try {
  57. String datas = request.getParameter("datas");
  58. if (!StringUtils.isEmpty(datas)) {
  59. if (!CollectionUtils.isEmpty(unValidIds)) {
  60. List<HashMap> reviseDataList = JSONArray.parseArray(datas, HashMap.class);
  61. List<HashMap> rightDatas = new ArrayList(reviseDataList.size());
  62. Iterator var10 = reviseDataList.iterator();
  63. while(var10.hasNext()) {
  64. HashMap map = (HashMap)var10.next();
  65. if (!unValidIds.contains(map.get("id"))) {
  66. rightDatas.add(map);
  67. }
  68. }
  69. datas = JSONArray.toJSONString(rightDatas);
  70. }
  71. this._batchSaveReviseData(ctx,datas, batchMessageTipsHeader);
  72. }
  73. } catch (Exception var13) {
  74. logger.error("batchSaveReviseDataAction is error: ", var13);
  75. }
  76. }
  77. protected void _batchSaveReviseData(Context ctx, String reviseDataJson, BatchMessageTipsHeader batchMessageTipsHeader) throws BOSException, EASBizException {
  78. List<HashMap> reviseDataList = JSONArray.parseArray(reviseDataJson, HashMap.class);
  79. CoreBaseCollection evaResultSummaryCollection = new CoreBaseCollection();
  80. if (!CollectionUtils.isEmpty(reviseDataList)) {
  81. Set<String> summaryIds = new HashSet(reviseDataList.size());
  82. Set<String> summaryErrIds = new HashSet(reviseDataList.size());
  83. Iterator var7 = reviseDataList.iterator();
  84. while(var7.hasNext()) {
  85. HashMap reviseData = (HashMap)var7.next();
  86. EvaResultSummaryInfo evaResultSummaryInfo = new EvaResultSummaryInfo();
  87. summaryIds.add((String)reviseData.get("id"));
  88. evaResultSummaryInfo.put("id", reviseData.get("id"));
  89. if (reviseData.get("reviseSumScore") != null && org.apache.commons.lang.StringUtils.isNotBlank(String.valueOf(reviseData.get("reviseSumScore")))) {
  90. evaResultSummaryInfo.put("reviseSumScore", reviseData.get("reviseSumScore"));
  91. }
  92. evaResultSummaryInfo.put("reviseGradeLevel", reviseData.get("reviseGradeLevel"));
  93. evaResultSummaryInfo.put("reviseReason", reviseData.get("reviseReason"));
  94. Object perCoefficientObj=reviseData.get("perCoefficient");
  95. Object perMaxCoefficientObj=reviseData.get("perMaxCoefficient");
  96. Object perMinCoefficientObj=reviseData.get("perMinCoefficient");
  97. if(null==perCoefficientObj||null==perMaxCoefficientObj||null==perMinCoefficientObj) {
  98. evaResultSummaryCollection.add(evaResultSummaryInfo);
  99. }else {
  100. evaResultSummaryInfo.put("perCoefficient", perCoefficientObj);
  101. BigDecimal perMaxCoefficient = new BigDecimal(perMaxCoefficientObj.toString());
  102. BigDecimal perMinCoefficient = new BigDecimal(perMinCoefficientObj.toString());
  103. BigDecimal perCoefficient = new BigDecimal(perCoefficientObj.toString());
  104. if (perCoefficient.compareTo(perMaxCoefficient) > 0
  105. || perCoefficient.compareTo(perMinCoefficient) < 0) {
  106. summaryErrIds.add((String) reviseData.get("id"));
  107. addBatchMessageTip((String) reviseData.get("id"), "所修改的绩效系数,大于最大绩效系数或者小于最小绩效系数!", batchMessageTipsHeader);
  108. } else {
  109. evaResultSummaryCollection.add(evaResultSummaryInfo);
  110. }
  111. }
  112. }
  113. Object periodId = ((HashMap)reviseDataList.get(0)).get("periodId");
  114. List unValidIds;
  115. if (periodId != null) {
  116. unValidIds = EvaResultSummaryBillUtil.batchCheckScore(ctx, evaResultSummaryCollection, (String)periodId, batchMessageTipsHeader);
  117. } else {
  118. unValidIds = EvaResultSummaryBillUtil.batchCheckScoreBySummary(ctx, evaResultSummaryCollection, (String)((HashMap)reviseDataList.get(0)).get("perfSummarySchemeBaseId"), batchMessageTipsHeader);
  119. }
  120. if (!CollectionUtils.isEmpty(unValidIds)) {
  121. summaryIds.removeAll(unValidIds);
  122. }
  123. if (!CollectionUtils.isEmpty(summaryErrIds)) {
  124. summaryIds.removeAll(summaryErrIds);
  125. }
  126. if (CollectionUtils.isEmpty(summaryIds)) {
  127. return;
  128. }
  129. IEvaResultSummary resultSummary = EvaResultSummaryFactory.getLocalInstance(ctx);
  130. EntityViewInfo entityViewInfo = new EntityViewInfo();
  131. FilterInfo filterInfo = new FilterInfo();
  132. filterInfo.getFilterItems().add(new FilterItemInfo("id", summaryIds, CompareType.INCLUDE));
  133. entityViewInfo.setFilter(filterInfo);
  134. EvaResultSummaryCollection summaryCollection = resultSummary.getEvaResultSummaryCollection(entityViewInfo);
  135. CoreBaseCollection oldSummaryCollection = new CoreBaseCollection();
  136. if (summaryCollection != null && summaryCollection.size() > 0) {
  137. for(int i = 0; i < summaryCollection.size(); ++i) {
  138. oldSummaryCollection.add(summaryCollection.get(i));
  139. }
  140. }
  141. EvaResultSumRevisionLogService evaResultSumRevisionLogService = new EvaResultSumRevisionLogService();
  142. CoreBaseCollection evaResultSumRevisionLogCollection = evaResultSumRevisionLogService.packageResultSumRevisionLog(EvaResultSumLogSourceEnum.ENTRYREVISE, oldSummaryCollection, evaResultSummaryCollection, false);
  143. System.out.println("evaResultSummaryCollection:"+evaResultSummaryCollection);
  144. resultSummary.save(evaResultSummaryCollection);
  145. evaResultSumRevisionLogService.generatedEvaResultSumRevisionLog(ctx, evaResultSumRevisionLogCollection);
  146. }
  147. }
  148. /**
  149. * 项目经理校验
  150. * @param request
  151. * @param response
  152. * @param modelMap
  153. */
  154. public void tempAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws BOSException, SHRWebException {
  155. Context ctx = SHRContext.getInstance().getContext();
  156. List<String> idList = Lists.newArrayList();
  157. String ids = (String) this.getBillId(request);
  158. for (String id : ids.split(",")) {
  159. idList.add(id);
  160. }
  161. StringBuilder selParamId = new StringBuilder("''");
  162. for (int i = 0; i < idList.size(); i++) {
  163. selParamId.append(",?");
  164. }
  165. StringBuilder sql = new StringBuilder();
  166. sql.append(" select ers.fid,pp.FPSTARTDATE,ers.FADMINORGUNITID,ers.FADMINORGNAME,pp.FYEAR,pp.FTIMEPERIOD, ");
  167. sql.append(" pp.FCYCLETYPE,pp.FPENDDATE,pp.FPSTARTDATE,ppn.CFPEROBJECTIDID,ppm.CFPROJECTNAME,pmm.CFEMPLOYEEID ");
  168. sql.append(" from T_EVA_EvaResultSummary ers ");
  169. sql.append(" left join T_EVA_PerfPlan ppn on ers.FEVAPLANID=ppn.fid ");
  170. sql.append(" left join T_EVA_PerfPeriod pp on ers.FPERIODID=pp.fid ");
  171. sql.append(" left join CT_PRO_ProjectManagement ppm on ppn.CFPEROBJECTIDID=ppm.fid ");
  172. sql.append(" left join CT_PRO_MemberManagement pmm on ppm.fid=pmm.CFPROJECTMANAGEMENID and pmm.CFSTATE=1 ");
  173. sql.append(" and pmm.CFPTYPEID in( ");
  174. sql.append(" select fid from CT_PRO_ProjectType where FNUMBER='ProjectManager') ");
  175. sql.append(" and pmm.CFPROJECTROLEID in( ");
  176. sql.append(" select fid from CT_PRO_ProjectRole where FNUMBER ='HTY110') ");
  177. sql.append(" where ers.fid in (");
  178. sql.append(selParamId);
  179. sql.append(") ");
  180. sql.append(" and pmm.CFEMPLOYEEID=ers.fpersonid ");
  181. IRowSet rs = DbUtil.executeQuery(ctx, sql.toString(), idList.toArray());
  182. Map<String, String> map = Maps.newHashMap();
  183. map.put("ProjectManager",rs.size()>0?"1":"0");
  184. this.writeSuccessData(map);
  185. }
  186. private static PerfEvaObjectCollection getPerfEvaObjectCollectionByIds(Set<String> billIds) throws BOSException {
  187. FilterInfo filterInfo = new FilterInfo();
  188. filterInfo.getFilterItems().add(new FilterItemInfo("id", billIds, CompareType.INCLUDE));
  189. EntityViewInfo evi = new EntityViewInfo();
  190. evi.setFilter(filterInfo);
  191. IPerfEvaObject iPerfEvaObject = PerfEvaObjectFactory.getRemoteInstance();
  192. return iPerfEvaObject.getPerfEvaObjectCollection(evi);
  193. }
  194. public void batchAssignGroupAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException, BOSException {
  195. String group = request.getParameter("group");
  196. String billIds = (String) this.getBillId(request);
  197. Context ctx = SHRContext.getInstance().getContext();
  198. if (StringUtils.isEmpty(billIds)&&StringUtils.isEmpty(group)) {
  199. throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.INDECATORNOTSAVEDINSELECTGROUP)).getMessage());
  200. } else {
  201. try {
  202. Set<String> fails = new HashSet();
  203. List<String> idList = Lists.newArrayList();
  204. List<String> idsessList = Lists.newArrayList();
  205. String[] ids = billIds.split(",");
  206. for (String id : ids ) {
  207. idList.add(id);
  208. }
  209. StringBuilder selParamId = new StringBuilder("''");
  210. for (int i = 0; i < idList.size(); i++) {
  211. selParamId.append(",?");
  212. }
  213. StringBuilder sql = new StringBuilder();
  214. sql.append(" select FEVAOBJID,fid from T_EVA_EvaResultSummary where FBILLSTATE!=3 and fid in ( ");
  215. sql.append(selParamId);
  216. sql.append(" ) ");
  217. IRowSet rowSet = DbUtil.executeQuery(ctx,sql.toString(),idList.toArray());
  218. while (rowSet.next()){
  219. String fid = rowSet.getString("fid");
  220. String upd = "update T_EVA_EvaResultSummary set cfgroup=? where fid=?";
  221. DbUtil.execute(ctx,upd,new String[]{group,fid});
  222. idsessList.add(fid);
  223. }
  224. idList.removeAll(idsessList);
  225. fails.addAll(idList);
  226. if (fails.size() > 0) {
  227. addBatchMessageTips(fails, "只有未审核的数据才能指定分组。", batchMessageTipsHeader);
  228. }
  229. } catch (BOSException var22) {
  230. logger.error("", var22);
  231. throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)).getMessage());
  232. } catch (SQLException var24) {
  233. logger.error("", var24);
  234. throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)).getMessage());
  235. }
  236. }
  237. }
  238. public void clearBelongGroupAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException, BOSException {
  239. String billId = this.getBillId(request);
  240. if (!StringUtils.isEmpty(billId)) {
  241. try {
  242. Context ctx = SHRContext.getInstance().getContext();
  243. List<String> idList = Lists.newArrayList();
  244. List<String> idsessList = Lists.newArrayList();
  245. String[] ids = billId.split(",");
  246. for (String id : ids ) {
  247. idList.add(id);
  248. }
  249. StringBuilder selParamId = new StringBuilder("''");
  250. for (int i = 0; i < idList.size(); i++) {
  251. selParamId.append(",?");
  252. }
  253. StringBuilder sql = new StringBuilder();
  254. sql.append(" select FEVAOBJID,fid from T_EVA_EvaResultSummary where FBILLSTATE!=3 and fid in ( ");
  255. sql.append(selParamId);
  256. sql.append(" ) ");
  257. IRowSet rowSet = DbUtil.executeQuery(ctx,sql.toString(),idList.toArray());
  258. while (rowSet.next()){
  259. String fid = rowSet.getString("fid");
  260. String upd = "update T_EVA_EvaResultSummary set cfgroup=? where fid=?";
  261. DbUtil.execute(ctx,upd,new String[]{"",fid});
  262. idsessList.add(fid);
  263. }
  264. idList.removeAll(idsessList);
  265. if (idList.size() > 0) {
  266. addBatchMessageTips(idList, "只有未审核的数据才能清除分组。", batchMessageTipsHeader);
  267. }
  268. } catch (BOSException var22) {
  269. logger.error("", var22);
  270. throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)).getMessage());
  271. } catch (SQLException var24) {
  272. logger.error("", var24);
  273. throw new ShrWebBizException((new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR)).getMessage());
  274. }
  275. }
  276. }
  277. /**
  278. * 获取绩效系数
  279. * @param request
  280. * @param response
  281. * @param modelMap
  282. */
  283. public void performanceLevelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws BOSException, SHRWebException {
  284. Context ctx = SHRContext.getInstance().getContext();
  285. List<String> idList = Lists.newArrayList();
  286. String ids = (String) this.getBillId(request);
  287. String period = (String) request.getParameter("period");
  288. String planId = (String) request.getParameter("planId");
  289. List<String> idsessList = Lists.newArrayList();
  290. for (String id : ids.split(",")) {
  291. idList.add(id);
  292. }
  293. StringBuilder selParamId = new StringBuilder("''");
  294. for (int i = 0; i < idList.size(); i++) {
  295. selParamId.append(",?");
  296. }
  297. try {
  298. StringBuilder sqlsel= new StringBuilder();
  299. sqlsel.append(" select fid from T_EVA_EvaResultSummary where FBILLSTATE !=3 and fid in ( ");
  300. sqlsel.append(selParamId);
  301. sqlsel.append(" ) ");
  302. IRowSet rs = DbUtil.executeQuery(ctx, sqlsel.toString(), idList.toArray());
  303. while (rs.next()){
  304. idsessList.add(rs.getString("fid"));
  305. }
  306. StringBuilder selsessParamId = new StringBuilder("''");
  307. for (int i = 0; i < idsessList.size(); i++) {
  308. selsessParamId.append(",?");
  309. }
  310. StringBuilder sqlpl = new StringBuilder();
  311. //sqlpl.append(" update T_EVA_EvaResultSummary set CFGROUP=(select CFCOEFFICIENT from CT_PER_PerformanceLevel where CFLEVEL=isnull(FREVISEGRADELEVEL,FGRADELEVEL)) ");
  312. sqlpl.append(" update T_EVA_EvaResultSummary set CFPERCOEFFICIENT=(select CFCOEFFICIENT from CT_PER_PerformanceLevel where CFLEVEL=isnull(FREVISEGRADELEVEL,FGRADELEVEL)), ");
  313. sqlpl.append(" CFPERMAXCOEFFICIENT=(select CFMAXCOEFFICIENT from CT_PER_PerformanceLevel where CFLEVEL=isnull(FREVISEGRADELEVEL,FGRADELEVEL)), ");
  314. sqlpl.append(" CFPERMINCOEFFICIENT=(select CFMINCOEFFICIENT from CT_PER_PerformanceLevel where CFLEVEL=isnull(FREVISEGRADELEVEL,FGRADELEVEL)) ");
  315. sqlpl.append(" where FEVAPLANID =? and FPERIODID =? and fid in ( ");
  316. sqlpl.append(selsessParamId);
  317. sqlpl.append(" ) ");
  318. idsessList.add(0, planId);
  319. idsessList.add(1, period);
  320. DbUtil.execute(ctx, sqlpl.toString(), idsessList.toArray());
  321. idList.removeAll(idsessList);
  322. if (idList.size()>0){
  323. addBatchMessageTips(idList,"当前已经审核通过获取更新失败", batchMessageTipsHeader);
  324. }
  325. }catch (Exception e){
  326. e.printStackTrace();
  327. addBatchMessageTips(idList, e.getMessage(), batchMessageTipsHeader);
  328. }
  329. }
  330. @Override
  331. protected void setInitData(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, Map<String, Object> initData) throws SHRWebException {
  332. super.setInitData(request, response, modelMap, initData);
  333. Context ctx = SHRContext.getInstance().getContext();
  334. try {
  335. Map<String, Object> custom_params = (Map<String, Object>) initData.get("custom_params");
  336. String perfPlanId = (String) custom_params.get("perfPlanId");
  337. StringBuilder planSql = new StringBuilder();
  338. planSql.append(" select pp.fid,pp.CFPerobjectIdId,ppm.CFPROJECTNAME from T_EVA_PerfPlan pp ");
  339. planSql.append(" left join CT_PRO_ProjectManagement ppm on ppm.fid = pp.CFPerobjectIdId where pp.fid=? and pp.CFPerobjectIdId is not null");
  340. IRowSet rs = DbUtil.executeQuery(ctx, planSql.toString(), new Object[]{perfPlanId});
  341. if (rs.next()) {
  342. String perobjectId = rs.getString("CFPerobjectIdId");
  343. String projectName = rs.getString("CFPROJECTNAME");
  344. custom_params.put("projectName",projectName);
  345. custom_params.put("perobjectId",perobjectId);
  346. initData.put("perobjectId",perobjectId);
  347. initData.put("projectName",projectName);
  348. }else {
  349. custom_params.put("perobjectId","");
  350. custom_params.put("projectName","");
  351. initData.put("perobjectId","");
  352. initData.put("projectName","");
  353. }
  354. }catch (Exception e){
  355. e.printStackTrace();
  356. }
  357. }
  358. /**
  359. * 获取人员项目正态分布规则
  360. *
  361. * @param ctx
  362. * @param idList 非必填
  363. * @param batchMessage 非必填
  364. * @return
  365. * @throws BOSException
  366. * @throws SQLException
  367. */
  368. public Map<String, Map<String, BigDecimal>> getProjectPerformPro(Context ctx, List<String> idList, Map<String, String> batchMessage) throws BOSException, SQLException {
  369. //获取正态分布规则
  370. Map<String, Map<String, BigDecimal>> orgLevelMap = Maps.newHashMap();
  371. PerformProTeamCollection proCollection = PerformProTeamFactory.getLocalInstance(ctx).getPerformProTeamCollection(" where status=1 ");
  372. if (proCollection.size() == 1) {
  373. StringBuilder orgPerSql = new StringBuilder();
  374. orgPerSql.append(" select fp.fid,fpe.CFS,fpe.CFA,fpe.CFB,fpe.CFC,fpe.CFD,fpe.CFORGPERFORMTYPE ");
  375. orgPerSql.append(" from CT_PF_PerformProTeam fp ");
  376. orgPerSql.append(" left join CT_PF_PerformProTeamEntry fpe on fp.fid=fpe.FPARENTID ");
  377. orgPerSql.append(" where fp.CFSTATUS = 1 ");
  378. orgPerSql.append(" order by fp.FCREATETIME ");
  379. IRowSet rs = DbUtil.executeQuery(ctx, orgPerSql.toString());
  380. while (rs.next()) {
  381. Map<String, BigDecimal> objectMap = Maps.newHashMap();
  382. String type = rs.getString("CFORGPERFORMTYPE");
  383. objectMap.put("S", rs.getBigDecimal("CFS"));
  384. objectMap.put("A", rs.getBigDecimal("CFA"));
  385. objectMap.put("B", rs.getBigDecimal("CFB"));
  386. objectMap.put("C", rs.getBigDecimal("CFC"));
  387. objectMap.put("D", rs.getBigDecimal("CFD"));
  388. orgLevelMap.put(type, objectMap);
  389. }
  390. } else if (proCollection.size() > 1) {
  391. if (null != batchMessage && null != idList) {
  392. for (String key : idList) {
  393. batchMessage.put(key, "存在多个正态分布规则,请检查!");
  394. }
  395. }
  396. } else {
  397. if (null != batchMessage && null != idList) {
  398. for (String key : idList) {
  399. batchMessage.put(key, "不存在正态分布规则,请检查!");
  400. }
  401. }
  402. }
  403. return orgLevelMap;
  404. }
  405. /**
  406. * 获取项目分组人数
  407. *
  408. * @param ctx
  409. * @param period
  410. * @param planId
  411. * @return
  412. * @throws BOSException
  413. * @throws SQLException
  414. */
  415. public Map<String, Map<String, String>> getProjectLevelCountMap(Context ctx, String period, String planId) throws BOSException, SQLException {
  416. // StringBuilder paramSql = new StringBuilder("''");
  417. // for (int i = 0; i < idList.size(); i++) {
  418. // paramSql.append(",?");
  419. // }
  420. //获取组织分组人数
  421. StringBuilder orgSql = new StringBuilder();
  422. orgSql.append(" select pp.CFPerobjectIdId, ers.FPERIODID,ers.FEVAPLANID,count(*) alls from T_EVA_EvaResultSummary ers ");
  423. orgSql.append(" left join T_EVA_PerfPlan pp on pp.fid=ers.FEVAPLANID ");
  424. // orgSql.append(paramSql);
  425. // orgSql.append(" ) ");
  426. orgSql.append(" where FPERIODID=? and FEVAPLANID=? ");
  427. orgSql.append(" group by pp.CFPerobjectIdId, ers.FPERIODID, ers.FEVAPLANID ");
  428. IRowSet rs = DbUtil.executeQuery(ctx, orgSql.toString(), new String[]{period, planId});
  429. Map<String, Map<String, String>> orgLevelMap = Maps.newHashMap();
  430. while (rs.next()) {
  431. Map<String, String> map = Maps.newHashMap();
  432. String CFPerobjectIdId = rs.getString("CFPerobjectIdId");
  433. String FPERIODID = rs.getString("FPERIODID");
  434. String FEVAPLANID = rs.getString("FEVAPLANID");
  435. String key = CFPerobjectIdId + FPERIODID + FEVAPLANID;
  436. map.put("CFPerobjectIdId", CFPerobjectIdId);
  437. map.put("FPERIODID", FPERIODID);
  438. map.put("FEVAPLANID", FEVAPLANID);
  439. //当前周期,当前考核计划,当前组织下的总人数
  440. map.put("alls", rs.getString("alls"));
  441. orgLevelMap.put(key, map);
  442. }
  443. return orgLevelMap;
  444. }
  445. /**
  446. * 获取人员的等级项目分组
  447. *
  448. * @param ctx
  449. * @param period
  450. * @param planId
  451. * @return
  452. * @throws BOSException
  453. * @throws SQLException
  454. */
  455. public Map<String, Map<String, String>> getPersonProjectLevelLensMap(Context ctx, String period, String planId) throws BOSException, SQLException {
  456. Map<String, Map<String, String>> personLevelMap = Maps.newHashMap();
  457. StringBuilder orgLevelSql = new StringBuilder();
  458. orgLevelSql.append(" select count(*) lens,CFPerobjectIdId,FPERIODID,FEVAPLANID,revLevel from ( ");
  459. orgLevelSql.append(" select pp.CFPerobjectIdId,s1.FPERIODID,s1.FEVAPLANID,isnull(s1.FREVISEGRADELEVEL,s1.FGRADELEVEL) revLevel ");
  460. orgLevelSql.append(" from T_EVA_EvaResultSummary s1 ");
  461. orgLevelSql.append(" left join T_EVA_PerfPlan pp on pp.fid=s1.FEVAPLANID ");
  462. orgLevelSql.append(" where s1.FPERIODID=? and s1.FEVAPLANID=? ");
  463. orgLevelSql.append(" ) t ");
  464. orgLevelSql.append(" group by CFPerobjectIdId, FPERIODID,FEVAPLANID,revLevel ");
  465. IRowSet orgLevelRs = DbUtil.executeQuery(ctx, orgLevelSql.toString(), new String[]{period, planId});
  466. while (orgLevelRs.next()) {
  467. Map<String, String> map = Maps.newHashMap();
  468. String CFPerobjectIdId = orgLevelRs.getString("CFPerobjectIdId");
  469. String FPERIODID = orgLevelRs.getString("FPERIODID");
  470. String FEVAPLANID = orgLevelRs.getString("FEVAPLANID");
  471. String revLevel = orgLevelRs.getString("revLevel");
  472. String key = CFPerobjectIdId + FPERIODID + FEVAPLANID + revLevel;
  473. map.put("lens", orgLevelRs.getString("lens"));
  474. map.put("CFPerobjectIdId", CFPerobjectIdId);
  475. map.put("FPERIODID", FPERIODID);
  476. map.put("FEVAPLANID", FEVAPLANID);
  477. map.put("revLevel", orgLevelRs.getString("revLevel"));
  478. personLevelMap.put(key, map);
  479. }
  480. return personLevelMap;
  481. }
  482. public Map<String, String> beforeAuditProjectEvaResut(Context ctx, String period, String planId, List<String> idList) throws BOSException, SQLException {
  483. Map<String, String> batchMessage = Maps.newHashMap();
  484. StringBuilder selParamId = new StringBuilder("''");
  485. for (int i = 0; i < idList.size(); i++) {
  486. selParamId.append(",?");
  487. }
  488. //获取正态分布规则
  489. Map<String, Map<String, BigDecimal>> personPerformMap = this.getProjectPerformPro(ctx, idList, batchMessage);
  490. if (null != personPerformMap && personPerformMap.size() > 0) {
  491. //获取组织分组人数
  492. Map<String, Map<String, String>> orgLevelMap = this.getProjectLevelCountMap(ctx, period, planId);
  493. //获取人员等级分组
  494. Map<String, Map<String, String>> personLevelMap = this.getPersonProjectLevelLensMap(ctx, period, planId);
  495. StringBuilder sel = new StringBuilder();
  496. sel.append(" select s1.fid,ppm.CFPROJECTNAME, pp.CFPerobjectIdId, s1.FPERIODID, s1.FEVAPLANID,");
  497. sel.append(" isnull(s1.FREVISEGRADELEVEL,s1.FGRADELEVEL) revLevel,s1.CFProjectLevel ");
  498. sel.append(" from T_EVA_EvaResultSummary s1 ");
  499. sel.append(" left join T_EVA_PerfPlan pp on pp.fid = s1.FEVAPLANID ");
  500. sel.append(" left join CT_PRO_ProjectManagement ppm on ppm.fid = pp.CFPerobjectIdId ");
  501. sel.append(" where s1.fid in (");
  502. sel.append(selParamId);
  503. sel.append(") ");
  504. IRowSet rs = DbUtil.executeQuery(ctx, sel.toString(), idList.toArray());
  505. BigDecimal big100 = new BigDecimal(100);
  506. while (rs.next()) {
  507. String fid = rs.getString("fid");
  508. String CFPROJECTNAME = rs.getString("CFPROJECTNAME");
  509. String CFPerobjectIdId = rs.getString("CFPerobjectIdId");
  510. String FPERIODID = rs.getString("FPERIODID");
  511. String FEVAPLANID = rs.getString("FEVAPLANID");
  512. String revLevel = rs.getString("revLevel");
  513. if (StrUtil.isBlank(revLevel)) {
  514. //String msg = String.format("%s绩效等级为空", CFPROJECTNAME);
  515. batchMessage.put(fid, "绩效等级为空,请维护后再审批");
  516. continue;
  517. }
  518. String key = CFPerobjectIdId + FPERIODID + FEVAPLANID;
  519. //项目绩效等级
  520. String projectLevel = rs.getString("CFProjectLevel");
  521. if (StrUtil.isBlank(projectLevel)) {
  522. String msg = String.format("%s项目绩效等级为空", CFPROJECTNAME);
  523. batchMessage.put(fid, msg);
  524. continue;
  525. }
  526. //该组织的组织绩效等级的正态分布
  527. Map<String, BigDecimal> personPerform = personPerformMap.get(projectLevel);
  528. if (null == personPerform) {
  529. String msg = String.format("没有找到%s项目绩效等级%s的正态分布规则", CFPROJECTNAME, projectLevel);
  530. batchMessage.put(fid, msg);
  531. continue;
  532. }
  533. //获取该组织下的人员总数
  534. Map<String, String> orgMap = orgLevelMap.get(key);
  535. //获取该组织下的人员各个绩效等级分组汇总
  536. // String keyRevLevel = FADMINORGUNITID + FPERIODID + FEVAPLANID + revLevel;
  537. // Map<String, String> personMap = personLevelMap.get(keyRevLevel);
  538. //已占用数
  539. BigDecimal lens = BigDecimal.ZERO;
  540. //获取等级D人数
  541. String keyRevLevelD = CFPerobjectIdId + FPERIODID + FEVAPLANID + "D";
  542. Map<String, String> personMapD = personLevelMap.get(keyRevLevelD);
  543. BigDecimal dLens = BigDecimal.ZERO;
  544. if (null != personMapD) {
  545. dLens = new BigDecimal(personMapD.get("lens"));
  546. }
  547. //获取等级C人数
  548. String keyRevLevelC = CFPerobjectIdId + FPERIODID + FEVAPLANID + "C";
  549. Map<String, String> personMapC = personLevelMap.get(keyRevLevelC);
  550. BigDecimal cLens = BigDecimal.ZERO;
  551. if (null != personMapC) {
  552. cLens = new BigDecimal(personMapC.get("lens"));
  553. }
  554. //获取等级B人数
  555. String keyRevLevelB = CFPerobjectIdId + FPERIODID + FEVAPLANID + "B";
  556. Map<String, String> personMapB = personLevelMap.get(keyRevLevelB);
  557. BigDecimal bLens = BigDecimal.ZERO;
  558. if (null != personMapB) {
  559. bLens = new BigDecimal(personMapB.get("lens"));
  560. }
  561. //获取等级A人数
  562. String keyRevLevelA = CFPerobjectIdId + FPERIODID + FEVAPLANID + "A";
  563. Map<String, String> personMapA = personLevelMap.get(keyRevLevelA);
  564. BigDecimal aLens = BigDecimal.ZERO;
  565. if (null != personMapA) {
  566. aLens = new BigDecimal(personMapA.get("lens"));
  567. }
  568. //获取等级S人数
  569. String keyRevLevelS = CFPerobjectIdId + FPERIODID + FEVAPLANID + "S";
  570. Map<String, String> personMapS = personLevelMap.get(keyRevLevelS);
  571. BigDecimal sLens = BigDecimal.ZERO;
  572. if (null != personMapS) {
  573. sLens = new BigDecimal(personMapS.get("lens"));
  574. }
  575. //总人数
  576. BigDecimal alls = new BigDecimal(orgMap.get("alls"));
  577. //当前等级正态分布比例
  578. BigDecimal scale = personPerform.get(revLevel);
  579. //创建每个等级的人数列表
  580. Map<String, BigDecimal> bigsList = Maps.newHashMap();
  581. BigDecimal bigS = ((personPerform.get("S").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP));
  582. bigsList.put("S", bigS);
  583. BigDecimal bigA = ((personPerform.get("A").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP));
  584. bigsList.put("A", bigA);
  585. BigDecimal bigB = ((personPerform.get("B").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP));
  586. bigsList.put("B", bigB);
  587. BigDecimal bigC = ((personPerform.get("C").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP));
  588. bigsList.put("C", bigC);
  589. BigDecimal bigD = ((personPerform.get("D").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP));
  590. bigsList.put("D", bigD);
  591. BigDecimal personSize = BigDecimal.ZERO;
  592. BigDecimal personMaxSize = BigDecimal.ZERO;
  593. List<String> ldrs = Lists.newArrayList();
  594. //进行额度加减
  595. switch (revLevel) {
  596. case "D":
  597. personSize = personSize.add(bigD).subtract(dLens);
  598. lens = lens.add(dLens);
  599. if(!"D".equals(revLevel)) {
  600. personMaxSize = personMaxSize.add((bigD));
  601. }else {
  602. personMaxSize = personMaxSize.add((bigD).subtract(dLens));
  603. }
  604. ldrs.add("D最多%D人,");
  605. bigsList.remove("D");
  606. case "C":
  607. personSize = personSize.add(bigC).subtract(cLens);
  608. lens = lens.add(cLens);
  609. if("C".equals(revLevel)) {
  610. personMaxSize = personMaxSize.add((bigC));
  611. }else {
  612. personMaxSize = personMaxSize.add((bigC).subtract(cLens));
  613. }
  614. ldrs.add("C最多%C人,");
  615. bigsList.remove("C");
  616. case "B":
  617. personSize = personSize.add(bigB).subtract(bLens);
  618. lens = lens.add(bLens);
  619. if("B".equals(revLevel)) {
  620. personMaxSize = personMaxSize.add((bigB));
  621. }else {
  622. personMaxSize = personMaxSize.add((bigB).subtract(bLens));
  623. }
  624. ldrs.add("B最多%B人,");
  625. bigsList.remove("B");
  626. case "A":
  627. personSize = personSize.add(bigA).subtract(aLens);
  628. lens = lens.add(aLens);
  629. if("A".equals(revLevel)) {
  630. personMaxSize = personMaxSize.add((bigA));
  631. }else {
  632. personMaxSize = personMaxSize.add((bigA).subtract(aLens));
  633. }
  634. ldrs.add("A最多%A人,");
  635. bigsList.remove("A");
  636. case "S":
  637. personSize = personSize.add(bigS).subtract(sLens);
  638. lens = lens.add(sLens);
  639. if("S".equals(revLevel)) {
  640. personMaxSize = personMaxSize.add(((bigS)));
  641. }else {
  642. personMaxSize = personMaxSize.add(((bigS).subtract(sLens)));
  643. }
  644. ldrs.add("S最多%S人,");
  645. bigsList.remove("S");
  646. }
  647. //String ld = "当前周期绩效等级为%l的人数为%maxs人,S最多%S人,A最多%A人,B最多%B人,C最多%C人,D最多%D人,请修正后重新审核.";
  648. String ld = "当前周期绩效等级为%l的人数为%maxs人,";
  649. if (personSize.compareTo(BigDecimal.ZERO) < 0) {
  650. String ldrstr = ldrs.get(0);
  651. // ldrs.remove(0);
  652. // for (String ldr : ldrs) {
  653. // ld = ld.replace(ldr,"");
  654. // }
  655. ld += ldrstr;
  656. ld = ld.replace("%l", revLevel);
  657. ld = ld.replace("%maxs", lens.toPlainString());
  658. ld = ld.replace("%" + revLevel, (personMaxSize.compareTo(BigDecimal.ZERO)>0?personMaxSize:BigDecimal.ZERO).toPlainString());
  659. // for(Map.Entry<String,BigDecimal> entry : bigsList.entrySet()){
  660. // BigDecimal bigv = entry.getValue();
  661. // String bigk = entry.getKey();
  662. // ld=ld.replace("%"+bigk,bigv.toPlainString());
  663. // }
  664. ld += "请修正后重新审核.";
  665. batchMessage.put(fid, ld);
  666. }
  667. }
  668. }
  669. return batchMessage;
  670. }
  671. /**
  672. * 获取人员组织正态分布规则
  673. *
  674. * @param ctx
  675. * @param idList 非必填
  676. * @param batchMessage 非必填
  677. * @return
  678. * @throws BOSException
  679. * @throws SQLException
  680. */
  681. public Map<String, Map<String, BigDecimal>> getPersonPerformPro(Context ctx, List<String> idList, Map<String, String> batchMessage) throws BOSException, SQLException {
  682. //获取正态分布规则
  683. Map<String, Map<String, BigDecimal>> orgLevelMap = Maps.newHashMap();
  684. PersonPerformProCollection proCollection = PersonPerformProFactory.getLocalInstance(ctx).getPersonPerformProCollection(" where state=1 ");
  685. if (proCollection.size() == 1) {
  686. StringBuilder orgPerSql = new StringBuilder();
  687. orgPerSql.append(" select fp.fid,fpe.CFS,fpe.CFA,fpe.CFB,fpe.CFC,fpe.CFD,fpe.CFORGPERFORMTYPE ");
  688. orgPerSql.append(" from CT_PF_PersonPerformPro fp ");
  689. orgPerSql.append(" left join CT_PF_PersonPerformProEntry fpe on fp.fid=fpe.FPARENTID ");
  690. orgPerSql.append(" where fp.CFSTATE = 1 ");
  691. orgPerSql.append(" order by fp.FCREATETIME ");
  692. IRowSet rs = DbUtil.executeQuery(ctx, orgPerSql.toString());
  693. while (rs.next()) {
  694. Map<String, BigDecimal> objectMap = Maps.newHashMap();
  695. String type = rs.getString("CFORGPERFORMTYPE");
  696. objectMap.put("S", rs.getBigDecimal("CFS"));
  697. objectMap.put("A", rs.getBigDecimal("CFA"));
  698. objectMap.put("B", rs.getBigDecimal("CFB"));
  699. objectMap.put("C", rs.getBigDecimal("CFC"));
  700. objectMap.put("D", rs.getBigDecimal("CFD"));
  701. orgLevelMap.put(type, objectMap);
  702. }
  703. } else if (proCollection.size() > 1) {
  704. if (null != batchMessage && null != idList) {
  705. for (String key : idList) {
  706. batchMessage.put(key, "存在多个正态分布规则,请检查!");
  707. }
  708. }
  709. } else {
  710. if (null != batchMessage && null != idList) {
  711. for (String key : idList) {
  712. batchMessage.put(key, "不存在正态分布规则,请检查!");
  713. }
  714. }
  715. }
  716. return orgLevelMap;
  717. }
  718. /**
  719. * 获取组织分组人数
  720. *
  721. * @param ctx
  722. * @param period
  723. * @param planId
  724. * @return
  725. * @throws BOSException
  726. * @throws SQLException
  727. */
  728. public Map<String, Map<String, String>> getOrgLevelCountMap(Context ctx, String period, String planId) throws BOSException, SQLException {
  729. // StringBuilder paramSql = new StringBuilder("''");
  730. // for (int i = 0; i < idList.size(); i++) {
  731. // paramSql.append(",?");
  732. // }
  733. //获取组织分组人数
  734. StringBuilder orgSql = new StringBuilder();
  735. orgSql.append(" select FADMINORGUNITID, FPERIODID, FEVAPLANID,count( *) alls from ( ");
  736. orgSql.append(" select ( ");
  737. orgSql.append(" select top 1 adcount.fid from T_ORG_Admin child ");
  738. orgSql.append(" left join T_ORG_Admin adcount on (charindex(concat(adcount.flongnumber,'!'),child.flongnumber) = 1 or adcount.flongnumber = child.flongnumber) ");
  739. orgSql.append(" where child.fid=ers.FADMINORGUNITID ");
  740. orgSql.append(" and adcount.FLAYERTYPEID='00000000-0000-0000-0000-00000000000362824988' ");
  741. orgSql.append(" order by adcount.fsortcode) FADMINORGUNITID, ");
  742. orgSql.append(" ers.FPERIODID,ers.FEVAPLANID from T_EVA_EvaResultSummary ers ");
  743. orgSql.append(" where ers.FPERIODID=? and ers.FEVAPLANID=? ");
  744. orgSql.append(" ) t ");
  745. orgSql.append(" group by FADMINORGUNITID, FPERIODID, FEVAPLANID ");
  746. //orgSql.append(" select FADMINORGUNITID, FPERIODID,FEVAPLANID,count(*) alls from T_EVA_EvaResultSummary ");
  747. // orgSql.append("where fid in ( ");
  748. // orgSql.append(paramSql);
  749. // orgSql.append(" ) ");
  750. //orgSql.append(" where FPERIODID=? and FEVAPLANID=? ");
  751. //orgSql.append(" group by FADMINORGUNITID, FPERIODID, FEVAPLANID ");
  752. IRowSet rs = DbUtil.executeQuery(ctx, orgSql.toString(), new String[]{period, planId});
  753. Map<String, Map<String, String>> orgLevelMap = Maps.newHashMap();
  754. while (rs.next()) {
  755. Map<String, String> map = Maps.newHashMap();
  756. String FADMINORGUNITID = rs.getString("FADMINORGUNITID");
  757. String FPERIODID = rs.getString("FPERIODID");
  758. String FEVAPLANID = rs.getString("FEVAPLANID");
  759. String key = FADMINORGUNITID + FPERIODID + FEVAPLANID;
  760. map.put("FADMINORGUNITID", FADMINORGUNITID);
  761. map.put("FPERIODID", FPERIODID);
  762. map.put("FEVAPLANID", FEVAPLANID);
  763. //当前周期,当前考核计划,当前组织下的总人数
  764. map.put("alls", rs.getString("alls"));
  765. orgLevelMap.put(key, map);
  766. }
  767. return orgLevelMap;
  768. }
  769. /**
  770. * 获取人员的等级组织分组
  771. *
  772. * @param ctx
  773. * @param period
  774. * @param planId
  775. * @return
  776. * @throws BOSException
  777. * @throws SQLException
  778. */
  779. public Map<String, Map<String, String>> getPersonLevelLensMap(Context ctx, String period, String planId) throws BOSException, SQLException {
  780. Map<String, Map<String, String>> personLevelMap = Maps.newHashMap();
  781. StringBuilder orgLevelSql = new StringBuilder();
  782. orgLevelSql.append(" select count(*) lens, ");
  783. orgLevelSql.append(" FADMINORGUNITID,FPERIODID,FEVAPLANID,revLevel from ( ");
  784. orgLevelSql.append(" select (select top 1 adcount.fid from T_ORG_Admin child ");
  785. orgLevelSql.append(" left join T_ORG_Admin adcount on (charindex(concat(adcount.flongnumber,'!'),child.flongnumber) = 1 or adcount.flongnumber = child.flongnumber) ");
  786. orgLevelSql.append(" where child.fid=s1.FADMINORGUNITID ");
  787. orgLevelSql.append(" and adcount.FLAYERTYPEID='00000000-0000-0000-0000-00000000000362824988' ");
  788. orgLevelSql.append(" order by adcount.fsortcode) FADMINORGUNITID,s1.FPERIODID,s1.FEVAPLANID,isnull(s1.FREVISEGRADELEVEL,s1.FGRADELEVEL) revLevel ");
  789. orgLevelSql.append(" from T_EVA_EvaResultSummary s1 ");
  790. orgLevelSql.append(" where s1.FPERIODID=? s1.FEVAPLANID=? ");
  791. orgLevelSql.append(" ) t ");
  792. orgLevelSql.append(" group by FADMINORGUNITID, FPERIODID,FEVAPLANID,revLevel ");
  793. // orgLevelSql.append(" select count(*) lens,FADMINORGUNITID,FPERIODID,FEVAPLANID,revLevel from ( ");
  794. // orgLevelSql.append(" select s1.FADMINORGUNITID,s1.FPERIODID,s1.FEVAPLANID,isnull(s1.FREVISEGRADELEVEL,s1.FGRADELEVEL) revLevel from T_EVA_EvaResultSummary s1 ");
  795. // orgLevelSql.append(" where s1.FPERIODID=? and s1.FEVAPLANID=? ");
  796. // orgLevelSql.append(" ) t ");
  797. // orgLevelSql.append(" group by FADMINORGUNITID, FPERIODID,FEVAPLANID,revLevel ");
  798. IRowSet orgLevelRs = DbUtil.executeQuery(ctx, orgLevelSql.toString(), new String[]{period, planId});
  799. while (orgLevelRs.next()) {
  800. Map<String, String> map = Maps.newHashMap();
  801. String FADMINORGUNITID = orgLevelRs.getString("FADMINORGUNITID");
  802. String FPERIODID = orgLevelRs.getString("FPERIODID");
  803. String FEVAPLANID = orgLevelRs.getString("FEVAPLANID");
  804. String revLevel = orgLevelRs.getString("revLevel");
  805. String key = FADMINORGUNITID + FPERIODID + FEVAPLANID + revLevel;
  806. map.put("lens", orgLevelRs.getString("lens"));
  807. map.put("FADMINORGUNITID", FADMINORGUNITID);
  808. map.put("FPERIODID", FPERIODID);
  809. map.put("FEVAPLANID", FEVAPLANID);
  810. map.put("revLevel", orgLevelRs.getString("revLevel"));
  811. personLevelMap.put(key, map);
  812. }
  813. return personLevelMap;
  814. }
  815. /**
  816. * 根据上季度的组织等级,校验当前周期,当前考核计划,所选员工的所属组织的员工绩效等级分布校验
  817. *
  818. * @param request
  819. * @param response
  820. * @param modelMap
  821. * @param batchMessageTipsHeader
  822. * @throws SHRWebException
  823. */
  824. public void beforeAuditEvaResutAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
  825. Context ctx = SHRContext.getInstance().getContext();
  826. String ids = (String) request.getAttribute("billId");
  827. String period = (String) request.getParameter("period");
  828. String planId = (String) request.getParameter("planId");
  829. if (ids == null) {
  830. throw new ShrWebBizException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR));
  831. }
  832. try {
  833. List<String> idList = Lists.newArrayList();
  834. Set<String> idSet = Sets.newHashSet(idList);
  835. for (String id : ids.split(",")) {
  836. idList.add(id);
  837. }
  838. StringBuilder planSql = new StringBuilder();
  839. planSql.append("select fid,CFPerobjectIdId from T_EVA_PerfPlan where fid=? and CFPerobjectIdId is not null ");
  840. IRowSet rs = DbUtil.executeQuery(ctx, planSql.toString(), new Object[]{planId});
  841. if (rs.next()) {
  842. String CFPerobjectIdId = rs.getString("CFPerobjectIdId");
  843. Map<String, String> batchMessage = this.beforeAuditProjectEvaResut(ctx, period, planId, idList);
  844. if (null != batchMessage && batchMessage.size() > 0) {
  845. for (Map.Entry<String, String> entry : batchMessage.entrySet()) {
  846. addBatchMessageTip(entry.getKey(), entry.getValue(), batchMessageTipsHeader);
  847. idSet.remove(entry.getKey());
  848. }
  849. }
  850. } else {
  851. Map<String, String> batchMessage = this.beforeAuditEvaResut(ctx, period, planId, idList);
  852. if (null != batchMessage && batchMessage.size() > 0) {
  853. for (Map.Entry<String, String> entry : batchMessage.entrySet()) {
  854. addBatchMessageTip(entry.getKey(), entry.getValue(), batchMessageTipsHeader);
  855. idSet.remove(entry.getKey());
  856. }
  857. }
  858. //addBatchMessageSuccessTips(idSet,"验证成功",batchMessageTipsHeader);
  859. }
  860. this.setSuccessMessage("验证成功");
  861. } catch (Exception e) {
  862. e.printStackTrace();
  863. throw new ShrWebBizException(e);
  864. }
  865. }
  866. public Map<String, String> beforeAuditEvaResut(Context ctx, String period, String planId, List<String> idList) throws BOSException, SQLException {
  867. Map<String, String> batchMessage = Maps.newHashMap();
  868. StringBuilder selParamId = new StringBuilder("''");
  869. for (int i = 0; i < idList.size(); i++) {
  870. selParamId.append(",?");
  871. }
  872. //获取正态分布规则
  873. Map<String, Map<String, BigDecimal>> personPerformMap = this.getPersonPerformPro(ctx, idList, batchMessage);
  874. if (null != personPerformMap && personPerformMap.size() > 0) {
  875. //获取组织分组人数
  876. Map<String, Map<String, String>> orgLevelMap = this.getOrgLevelCountMap(ctx, period, planId);
  877. //获取人员等级分组
  878. Map<String, Map<String, String>> personLevelMap = this.getPersonLevelLensMap(ctx, period, planId);
  879. StringBuilder sel = new StringBuilder();
  880. sel.append(" select ers.fid,ers.FADMINORGNAME, ( ");
  881. sel.append(" select top 1 adcount.fid from T_ORG_Admin child ");
  882. sel.append(" left join T_ORG_Admin adcount on (charindex(concat(adcount.flongnumber,'!'),child.flongnumber) = 1 or adcount.flongnumber = child.flongnumber) ");
  883. sel.append(" where child.fid=ers.FADMINORGUNITID ");
  884. sel.append(" and adcount.FLAYERTYPEID='00000000-0000-0000-0000-00000000000362824988' ");
  885. sel.append(" order by adcount.fsortcode) FADMINORGUNITID, ers.FPERIODID, ers.FEVAPLANID,isnull(ers.FREVISEGRADELEVEL, ers.FGRADELEVEL) revLevel,ers.CFOrgLevel ");
  886. sel.append(" from T_EVA_EvaResultSummary ers where ers.fid in (");
  887. //sel.append("select fid,FADMINORGNAME, FADMINORGUNITID, FPERIODID, FEVAPLANID,isnull( FREVISEGRADELEVEL, FGRADELEVEL) revLevel,CFOrgLevel from T_EVA_EvaResultSummary where fid in (");
  888. sel.append(selParamId);
  889. sel.append(") ");
  890. IRowSet rs = DbUtil.executeQuery(ctx, sel.toString(), idList.toArray());
  891. BigDecimal big100 = new BigDecimal(100);
  892. while (rs.next()) {
  893. String fid = rs.getString("fid");
  894. String FADMINORGNAME = rs.getString("FADMINORGNAME");
  895. String FADMINORGUNITID = rs.getString("FADMINORGUNITID");
  896. String FPERIODID = rs.getString("FPERIODID");
  897. String FEVAPLANID = rs.getString("FEVAPLANID");
  898. String revLevel = rs.getString("revLevel");
  899. if (StrUtil.isBlank(revLevel)) {
  900. //String msg = String.format("%s绩效等级为空", CFPROJECTNAME);
  901. batchMessage.put(fid, "绩效等级为空,请维护后再审批");
  902. continue;
  903. }
  904. String key = FADMINORGUNITID + FPERIODID + FEVAPLANID;
  905. //上季度组织绩效等级
  906. String orgLevel = rs.getString("CFOrgLevel");
  907. if (null == orgLevel) {
  908. String msg = String.format("%s上季度组织绩效等级为空", FADMINORGNAME);
  909. batchMessage.put(fid, msg);
  910. continue;
  911. }
  912. //该组织的组织绩效等级的正态分布
  913. Map<String, BigDecimal> personPerform = personPerformMap.get(orgLevel);
  914. if (null == personPerform) {
  915. String msg = String.format("没有找到%s上季度组织绩效等级%s的正态分布规则", FADMINORGNAME, orgLevel);
  916. batchMessage.put(fid, msg);
  917. continue;
  918. }
  919. //获取该组织下的人员总数
  920. Map<String, String> orgMap = orgLevelMap.get(key);
  921. //获取该组织下的人员各个绩效等级分组汇总
  922. // String keyRevLevel = FADMINORGUNITID + FPERIODID + FEVAPLANID + revLevel;
  923. // Map<String, String> personMap = personLevelMap.get(keyRevLevel);
  924. //已占用数
  925. BigDecimal lens = BigDecimal.ZERO;
  926. //获取等级D人数
  927. String keyRevLevelD = FADMINORGUNITID + FPERIODID + FEVAPLANID + "D";
  928. Map<String, String> personMapD = personLevelMap.get(keyRevLevelD);
  929. BigDecimal dLens = BigDecimal.ZERO;
  930. if (null != personMapD) {
  931. dLens = new BigDecimal(personMapD.get("lens"));
  932. }
  933. //获取等级C人数
  934. String keyRevLevelC = FADMINORGUNITID + FPERIODID + FEVAPLANID + "C";
  935. Map<String, String> personMapC = personLevelMap.get(keyRevLevelC);
  936. BigDecimal cLens = BigDecimal.ZERO;
  937. if (null != personMapC) {
  938. cLens = new BigDecimal(personMapC.get("lens"));
  939. }
  940. //获取等级B人数
  941. String keyRevLevelB = FADMINORGUNITID + FPERIODID + FEVAPLANID + "B";
  942. Map<String, String> personMapB = personLevelMap.get(keyRevLevelB);
  943. BigDecimal bLens = BigDecimal.ZERO;
  944. if (null != personMapB) {
  945. bLens = new BigDecimal(personMapB.get("lens"));
  946. }
  947. //获取等级A人数
  948. String keyRevLevelA = FADMINORGUNITID + FPERIODID + FEVAPLANID + "A";
  949. Map<String, String> personMapA = personLevelMap.get(keyRevLevelA);
  950. BigDecimal aLens = BigDecimal.ZERO;
  951. if (null != personMapA) {
  952. aLens = new BigDecimal(personMapA.get("lens"));
  953. }
  954. //获取等级S人数
  955. String keyRevLevelS = FADMINORGUNITID + FPERIODID + FEVAPLANID + "S";
  956. Map<String, String> personMapS = personLevelMap.get(keyRevLevelS);
  957. BigDecimal sLens = BigDecimal.ZERO;
  958. if (null != personMapS) {
  959. sLens = new BigDecimal(personMapS.get("lens"));
  960. }
  961. //总人数
  962. BigDecimal alls = new BigDecimal(orgMap.get("alls"));
  963. //当前等级正态分布比例
  964. BigDecimal scale = personPerform.get(revLevel);
  965. //创建每个等级的人数列表
  966. Map<String, BigDecimal> bigsList = Maps.newHashMap();
  967. BigDecimal bigS = ((personPerform.get("S").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP));
  968. bigsList.put("S", bigS);
  969. BigDecimal bigA = ((personPerform.get("A").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP));
  970. bigsList.put("A", bigA);
  971. BigDecimal bigB = ((personPerform.get("B").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP));
  972. bigsList.put("B", bigB);
  973. BigDecimal bigC = ((personPerform.get("C").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP));
  974. bigsList.put("C", bigC);
  975. BigDecimal bigD = ((personPerform.get("D").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_UP));
  976. bigsList.put("D", bigD);
  977. BigDecimal personSize = BigDecimal.ZERO;
  978. BigDecimal personMaxSize = BigDecimal.ZERO;
  979. List<String> ldrs = Lists.newArrayList();
  980. //进行额度加减
  981. switch (revLevel) {
  982. case "D":
  983. personSize = personSize.add(bigD).subtract(dLens);
  984. lens = lens.add(dLens);
  985. if("D".equals(revLevel)) {
  986. personMaxSize = personMaxSize.add((bigD));
  987. }else {
  988. personMaxSize = personMaxSize.add((bigD).subtract(dLens));
  989. }
  990. ldrs.add("D最多%D人,");
  991. bigsList.remove("D");
  992. case "C":
  993. personSize = personSize.add(bigC).subtract(cLens);
  994. lens = lens.add(cLens);
  995. if("C".equals(revLevel)) {
  996. personMaxSize = personMaxSize.add((bigC) );
  997. }else {
  998. personMaxSize = personMaxSize.add((bigC).subtract(cLens));
  999. }
  1000. ldrs.add("C最多%C人,");
  1001. bigsList.remove("C");
  1002. case "B":
  1003. personSize = personSize.add(bigB).subtract(bLens);
  1004. lens = lens.add(bLens);
  1005. if("B".equals(revLevel)) {
  1006. personMaxSize = personMaxSize.add((bigB) );
  1007. }else {
  1008. personMaxSize = personMaxSize.add((bigB).subtract(bLens));
  1009. }
  1010. ldrs.add("B最多%B人,");
  1011. bigsList.remove("B");
  1012. case "A":
  1013. personSize = personSize.add(bigA).subtract(aLens);
  1014. lens = lens.add(aLens);
  1015. if( "A".equals(revLevel)) {
  1016. personMaxSize = personMaxSize.add((bigA));
  1017. }else {
  1018. personMaxSize = personMaxSize.add((bigA).subtract(aLens));
  1019. }
  1020. ldrs.add("A最多%A人,");
  1021. bigsList.remove("A");
  1022. case "S":
  1023. personSize = personSize.add(bigS).subtract(sLens);
  1024. lens = lens.add(sLens);
  1025. if("S".equals(revLevel)) {
  1026. personMaxSize = personMaxSize.add((bigS));
  1027. }else {
  1028. personMaxSize = personMaxSize.add((bigS).subtract(sLens));
  1029. }
  1030. ldrs.add("S最多%S人,");
  1031. bigsList.remove("S");
  1032. }
  1033. //String ld = "当前周期绩效等级为%l的人数为%maxs人,S最多%S人,A最多%A人,B最多%B人,C最多%C人,D最多%D人,请修正后重新审核.";
  1034. String ld = "当前周期绩效等级为%l的人数为%maxs人,";
  1035. if (personSize.compareTo(BigDecimal.ZERO) < 0) {
  1036. String ldrstr = ldrs.get(0);
  1037. // ldrs.remove(0);
  1038. // for (String ldr : ldrs) {
  1039. // ld = ld.replace(ldr,"");
  1040. // }
  1041. ld += ldrstr;
  1042. ld = ld.replace("%l", revLevel);
  1043. ld = ld.replace("%maxs", lens.toPlainString());
  1044. ld = ld.replace("%" + revLevel, (personMaxSize.compareTo(BigDecimal.ZERO)>0?personMaxSize:BigDecimal.ZERO).toPlainString());
  1045. // for(Map.Entry<String,BigDecimal> entry : bigsList.entrySet()){
  1046. // BigDecimal bigv = entry.getValue();
  1047. // String bigk = entry.getKey();
  1048. // ld=ld.replace("%"+bigk,bigv.toPlainString());
  1049. // }
  1050. ld += "请修正后重新审核.";
  1051. batchMessage.put(fid, ld);
  1052. }
  1053. }
  1054. }
  1055. return batchMessage;
  1056. }
  1057. @Override
  1058. public void auditEvaResutAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
  1059. super.auditEvaResutAction(request, response, modelMap, batchMessageTipsHeader);
  1060. }
  1061. /**
  1062. * 获取上季度组织等级批量
  1063. *
  1064. * @description:
  1065. * @author: lhbj
  1066. * @date: 2025/1/10 18:18
  1067. * @param: null
  1068. * @return:null
  1069. **/
  1070. public void bindDep_OR_ProjectBatchAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
  1071. Context ctx = SHRContext.getInstance().getContext();
  1072. String ids = (String) request.getAttribute("billId");
  1073. String period = (String) request.getParameter("period");
  1074. String planId = (String) request.getParameter("planId");
  1075. if (ids == null) {
  1076. throw new ShrWebBizException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR));
  1077. } else {
  1078. try {
  1079. StringBuilder planSql = new StringBuilder();
  1080. planSql.append("select fid,CFPerobjectIdId from T_EVA_PerfPlan where fid=? and CFPerobjectIdId is not null ");
  1081. IRowSet rs = DbUtil.executeQuery(ctx, planSql.toString(), new Object[]{planId});
  1082. if (rs.next()) {
  1083. this.bindProjectBatchAction(request, response, modelMap, batchMessageTipsHeader);
  1084. } else {
  1085. this.bindDepBatchAction(request, response, modelMap, batchMessageTipsHeader);
  1086. }
  1087. this.setSuccessMessage("验证成功");
  1088. } catch (Exception e) {
  1089. e.printStackTrace();
  1090. throw new ShrWebBizException(e);
  1091. }
  1092. }
  1093. }
  1094. /**
  1095. * 获取项目等级批量
  1096. *
  1097. * @description:
  1098. * @author: lhbj
  1099. * @date: 2025/1/10 18:18
  1100. * @param: null
  1101. * @return:null
  1102. **/
  1103. public void bindProjectBatchAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
  1104. Context ctx = SHRContext.getInstance().getContext();
  1105. String ids = (String) request.getAttribute("billId");
  1106. if (ids == null) {
  1107. throw new ShrWebBizException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR));
  1108. } else {
  1109. try {
  1110. List<String> idList = Lists.newArrayList();
  1111. for (String id : ids.split(",")) {
  1112. idList.add(id);
  1113. }
  1114. Set<String> idSet = Sets.newHashSet(idList);
  1115. Map<String, String> map = this.bindProject(ctx, ids);
  1116. for (Map.Entry<String, String> entry : map.entrySet()) {
  1117. addBatchMessageTip(entry.getKey(), entry.getValue(), batchMessageTipsHeader);
  1118. idSet.remove(entry.getKey());
  1119. }
  1120. //addBatchMessageSuccessTips(idSet,"验证成功",batchMessageTipsHeader);
  1121. this.setSuccessMessage("验证成功");
  1122. } catch (Exception e) {
  1123. e.printStackTrace();
  1124. throw new ShrWebBizException(e);
  1125. }
  1126. }
  1127. }
  1128. /**
  1129. * 绑定项目等级
  1130. *
  1131. * @param ctx
  1132. * @param ids
  1133. * @return
  1134. * @throws Exception
  1135. */
  1136. public Map<String, String> bindProject(Context ctx, String ids) throws Exception {
  1137. Map<String, String> batchMessage = Maps.newHashMap();
  1138. List<String> idList = Lists.newArrayList();
  1139. SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
  1140. if (ids == null) {
  1141. throw new Exception(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR));
  1142. } else {
  1143. try {
  1144. StringBuffer sql = new StringBuffer();
  1145. sql.append(" select ers.fid,pp.FPSTARTDATE,ers.FBILLSTATE,ers.FADMINORGUNITID,ers.FADMINORGNAME,pp.FYEAR,pp.FTIMEPERIOD, ");
  1146. sql.append(" pp.FCYCLETYPE,pp.FPENDDATE,pp.FPSTARTDATE,ppn.CFPEROBJECTIDID,ppm.CFPROJECTNAME,pmm.CFEMPLOYEEID ");
  1147. sql.append(" from T_EVA_EvaResultSummary ers ");
  1148. sql.append(" left join T_EVA_PerfPlan ppn on ers.FEVAPLANID=ppn.fid ");
  1149. sql.append(" left join T_EVA_PerfPeriod pp on ers.FPERIODID=pp.fid ");
  1150. sql.append(" left join CT_PRO_ProjectManagement ppm on ppn.CFPEROBJECTIDID=ppm.fid ");
  1151. sql.append(" left join CT_PRO_MemberManagement pmm on ppm.fid=pmm.CFPROJECTMANAGEMENID and pmm.CFSTATE=1 ");
  1152. sql.append(" and pmm.CFPTYPEID in( ");
  1153. sql.append(" select fid from CT_PRO_ProjectType where FNUMBER='ProjectManager') ");
  1154. sql.append(" and pmm.CFPROJECTROLEID in( ");
  1155. sql.append(" select fid from CT_PRO_ProjectRole where FNUMBER ='HTY110') ");
  1156. sql.append(" where pmm.CFEMPLOYEEID is not null and ers.fid in(''");
  1157. for (String id : ids.split(",")) {
  1158. idList.add(id);
  1159. sql.append(",'").append(id).append("'");
  1160. }
  1161. sql.append(" ) ");
  1162. IRowSet rsSql = DbUtil.executeQuery(ctx, sql.toString());
  1163. List<String> sess = Lists.newArrayList();
  1164. while (rsSql.next()) {
  1165. String id = rsSql.getString("fid");
  1166. String personid = rsSql.getString("CFEMPLOYEEID");
  1167. String CFPROJECTNAME = rsSql.getString("CFPROJECTNAME");
  1168. String perobjectid = rsSql.getString("CFPEROBJECTIDID");
  1169. String FBILLSTATE = rsSql.getString("FBILLSTATE");
  1170. if (!"3".equals(FBILLSTATE)) {
  1171. StringBuffer sqlPro = new StringBuffer();
  1172. sqlPro.append(" select isnull(ers.FREVISEGRADELEVEL,ers.FGRADELEVEL) FGRADELEVEL,ers.fid from ");
  1173. sqlPro.append(" T_EVA_EvaResultSummary ers ");
  1174. sqlPro.append(" left join T_EVA_PerfPlan ppn on ers.FEVAPLANID=ppn.fid ");
  1175. sqlPro.append(" left join T_EVA_PerfPeriod pp on ers.FPERIODID=pp.fid ");
  1176. sqlPro.append(" where ers.FBILLSTATE='3' and ers.FPERSONID=? and ppn.CFPEROBJECTIDID=? ");
  1177. sqlPro.append(" order by pp.FPENDDATE desc ");
  1178. IRowSet rsPro = DbUtil.executeQuery(ctx, sqlPro.toString(), new String[]{personid, perobjectid});
  1179. String FGRADELEVEL = "";
  1180. if (rsPro.next()) {
  1181. FGRADELEVEL = rsPro.getString("FGRADELEVEL");
  1182. }
  1183. if (StringUtils.isEmpty(FGRADELEVEL)) {
  1184. batchMessage.put(id, "未找到当前" + CFPROJECTNAME + "项目匹配的绩效等级");
  1185. } else {
  1186. StringBuilder upd = new StringBuilder();
  1187. upd.append("update T_EVA_EvaResultSummary set CFPROJECTLEVEL=? where fid=? ");
  1188. DbUtil.execute(ctx, upd.toString(), new String[]{FGRADELEVEL, id});
  1189. sess.add(id);
  1190. }
  1191. }else {
  1192. batchMessage.put(id, "当前已经审核通过获取更新失败!");
  1193. }
  1194. }
  1195. } catch (Exception e) {
  1196. e.printStackTrace();
  1197. throw new Exception(e);
  1198. }
  1199. }
  1200. return batchMessage;
  1201. }
  1202. /**
  1203. * 获取上季度组织等级批量
  1204. *
  1205. * @description:
  1206. * @author: lhbj
  1207. * @date: 2025/1/10 18:18
  1208. * @param: null
  1209. * @return:null
  1210. **/
  1211. public void bindDepBatchAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
  1212. Context ctx = SHRContext.getInstance().getContext();
  1213. String ids = (String) request.getAttribute("billId");
  1214. if (ids == null) {
  1215. throw new ShrWebBizException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR));
  1216. } else {
  1217. try {
  1218. List<String> idList = Lists.newArrayList();
  1219. for (String id : ids.split(",")) {
  1220. idList.add(id);
  1221. }
  1222. Set<String> idSet = Sets.newHashSet(idList);
  1223. Map<String, String> map = this.bindDep(ctx, ids);
  1224. for (Map.Entry<String, String> entry : map.entrySet()) {
  1225. addBatchMessageTip(entry.getKey(), entry.getValue(), batchMessageTipsHeader);
  1226. idSet.remove(entry.getKey());
  1227. }
  1228. //addBatchMessageSuccessTips(idSet,"验证成功",batchMessageTipsHeader);
  1229. this.setSuccessMessage("验证成功");
  1230. } catch (Exception e) {
  1231. e.printStackTrace();
  1232. throw new ShrWebBizException(e);
  1233. }
  1234. }
  1235. }
  1236. /**
  1237. * 绑定部门等级
  1238. *
  1239. * @param ctx
  1240. * @param ids
  1241. * @return
  1242. * @throws Exception
  1243. */
  1244. public Map<String, String> bindDep(Context ctx, String ids) throws Exception {
  1245. Map<String, String> batchMessage = Maps.newHashMap();
  1246. List<String> idList = Lists.newArrayList();
  1247. Map<String, String> id_orgIdMap = Maps.newHashMap();
  1248. SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
  1249. if (ids == null) {
  1250. throw new Exception(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR));
  1251. } else {
  1252. try {
  1253. StringBuffer sql = new StringBuffer();
  1254. sql.append(" select ers.fid,pp.FPSTARTDATE, ers.FBILLSTATE, ");
  1255. sql.append(" (select top 1 adcount.fid from T_ORG_Admin child ");
  1256. sql.append(" left join T_ORG_Admin adcount on (charindex(concat(adcount.flongnumber,'!'),child.flongnumber) = 1 or adcount.flongnumber = child.flongnumber) ");
  1257. sql.append(" where child.fid=ers.FADMINORGUNITID ");
  1258. sql.append(" and adcount.FLAYERTYPEID='00000000-0000-0000-0000-00000000000362824988' ");
  1259. sql.append(" order by adcount.fsortcode) FADMINORGUNITID ");
  1260. sql.append(" ,ers.FADMINORGNAME,pp.FYEAR,pp.FTIMEPERIOD, ");
  1261. sql.append(" pp.FCYCLETYPE,pp.FPENDDATE,pp.FPSTARTDATE from ");
  1262. sql.append(" T_EVA_EvaResultSummary ers ");
  1263. sql.append(" left join T_EVA_PerfPeriod pp on ers.FPERIODID=pp.fid ");
  1264. sql.append(" where ers.fid in(''");
  1265. for (String id : ids.split(",")) {
  1266. idList.add(id);
  1267. sql.append(",'").append(id).append("'");
  1268. }
  1269. sql.append(" ) ");
  1270. LocalDate startDate = null;
  1271. LocalDate endDate = null;
  1272. EvalplanCycleTypeEnum cycleTypeEnum = null;
  1273. IRowSet rsSql = DbUtil.executeQuery(ctx, sql.toString());
  1274. boolean faist = true;
  1275. while (rsSql.next()) {
  1276. String id = rsSql.getString("fid");
  1277. String orgId = rsSql.getString("FADMINORGUNITID");
  1278. String orgName = rsSql.getString("FADMINORGNAME");
  1279. String FBILLSTATE = rsSql.getString("FBILLSTATE");
  1280. if (faist) {
  1281. faist = false;
  1282. int FCYCLETYPE = rsSql.getInt("FCYCLETYPE");
  1283. Date FPENDDATE = rsSql.getDate("FPENDDATE");
  1284. Date FPSTARTDATE = rsSql.getDate("FPSTARTDATE");
  1285. Map<String, Object> cycleMap = this.getCycletype(sf.format(FPSTARTDATE), sf.format(FPENDDATE), FCYCLETYPE);
  1286. cycleTypeEnum = (EvalplanCycleTypeEnum) cycleMap.get("cycleType");
  1287. endDate = (LocalDate) cycleMap.get("endDate");
  1288. startDate = (LocalDate) cycleMap.get("startDate");
  1289. }
  1290. id_orgIdMap.put(id, orgId + "!" + orgName+"!"+FBILLSTATE);
  1291. }
  1292. List<String> sess = Lists.newArrayList();
  1293. //T_EVA_OrgEvaResultSummary
  1294. Map<String, Map<String, String>> mapMap = this.getOrgEvaResultLevel(ctx, startDate, endDate, cycleTypeEnum);
  1295. for (Map.Entry<String, String> ee : id_orgIdMap.entrySet()) {
  1296. String[] orgs = ee.getValue().split("!");
  1297. String orgId = orgs[0];
  1298. String orgName = orgs[1];
  1299. String FBILLSTATE = orgs[2];
  1300. String id = ee.getKey();
  1301. if (!"3".equals(FBILLSTATE)){
  1302. Map<String, String> orgLevelMap = mapMap.get(orgId);
  1303. if (null == orgLevelMap) {
  1304. batchMessage.put(id, "未找到当前" + orgName + "部门匹配的组织绩效等级");
  1305. } else {
  1306. String orgLevel = orgLevelMap.get("lastgradeLevel");
  1307. StringBuilder upd = new StringBuilder();
  1308. upd.append("update T_EVA_EvaResultSummary set CFOrgLevel=?,CFOrgLevelEveID=? where fid=? ");
  1309. DbUtil.execute(ctx, upd.toString(), new String[]{orgLevel, orgId, id});
  1310. sess.add(id);
  1311. }
  1312. }else {
  1313. batchMessage.put(id, "当前已经审核通过获取更新失败!");
  1314. }
  1315. }
  1316. } catch (Exception e) {
  1317. e.printStackTrace();
  1318. throw new Exception(e);
  1319. }
  1320. }
  1321. return batchMessage;
  1322. }
  1323. public Map<String, Object> getCycletype(String pstartdate, String penddate, int cycletype) {
  1324. Map<String, Object> map = Maps.newHashMap();
  1325. LocalDate startDate = LocalDate.parse(pstartdate, DateTimeFormatter.ISO_LOCAL_DATE);
  1326. LocalDate endDate = LocalDate.parse(penddate, DateTimeFormatter.ISO_LOCAL_DATE);
  1327. EvalplanCycleTypeEnum cycleTypeEnum = EvalplanCycleTypeEnum.getEnum(cycletype);
  1328. if (EvalplanCycleTypeEnum.FULL_YEAR_VALUE == cycletype) {
  1329. //周期为年度
  1330. endDate = endDate.plusYears(-1);
  1331. startDate = startDate.plusYears(-1);
  1332. cycleTypeEnum = EvalplanCycleTypeEnum.FULL_YEAR;
  1333. } else if (EvalplanCycleTypeEnum.HALF_YEAR_VALUE == cycletype) {
  1334. //周期为半年度
  1335. endDate = endDate.plusMonths(-6);
  1336. startDate = startDate.plusMonths(-6);
  1337. cycleTypeEnum = EvalplanCycleTypeEnum.HALF_YEAR;
  1338. } else if (EvalplanCycleTypeEnum.QUARTER_VALUE == cycletype) {
  1339. //获取为季度
  1340. endDate = endDate.plusMonths(-3);
  1341. startDate = startDate.plusMonths(-3);
  1342. cycleTypeEnum = EvalplanCycleTypeEnum.QUARTER;
  1343. } else if (EvalplanCycleTypeEnum.MONTHLY_VALUE == cycletype) {
  1344. //获取为季度
  1345. endDate = endDate.plusMonths(-1);
  1346. startDate = startDate.plusMonths(-1);
  1347. cycleTypeEnum = EvalplanCycleTypeEnum.MONTHLY;
  1348. }
  1349. map.put("cycleType", cycleTypeEnum);
  1350. map.put("endDate", endDate);
  1351. map.put("startDate", startDate);
  1352. return map;
  1353. }
  1354. /**
  1355. * 获取上季度组织等级
  1356. *
  1357. * @description:
  1358. * @author: lhbj
  1359. * @date: 2025/1/10 18:18
  1360. * @param: null
  1361. * @return:null
  1362. **/
  1363. public void bindDepAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
  1364. Context ctx = SHRContext.getInstance().getContext();
  1365. String ids = this.getBillId(request);
  1366. if (ids == null) {
  1367. throw new ShrWebBizException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR));
  1368. } else {
  1369. try {
  1370. Map<String, String> map = this.bindDep(ctx, ids);
  1371. this.writeSuccessData(map);
  1372. } catch (Exception e) {
  1373. e.printStackTrace();
  1374. throw new ShrWebBizException(e);
  1375. }
  1376. }
  1377. }
  1378. protected Map<String, Map<String, String>> getOrgEvaResultLevel(Context ctx, LocalDate startDate, LocalDate endDate) throws BOSException, SQLException {
  1379. return this.getOrgEvaResultLevel(ctx, startDate, endDate, EvalplanCycleTypeEnum.QUARTER);
  1380. }
  1381. protected Map<String, Map<String, String>> getOrgEvaResultLevel(Context ctx, LocalDate startDate, LocalDate endDate, EvalplanCycleTypeEnum cycletype) throws BOSException, SQLException {
  1382. Map<String, Map<String, String>> mapMap = Maps.newHashMap();
  1383. StringBuffer selSql = new StringBuffer();
  1384. selSql.append(" select oers.fid oersId, ");
  1385. selSql.append(" (select top 1 adcount.fid from T_ORG_Admin child ");
  1386. selSql.append(" left join T_ORG_Admin adcount on (charindex(concat(adcount.flongnumber,'!'),child.flongnumber) = 1 or adcount.flongnumber = child.flongnumber) ");
  1387. selSql.append(" where child.fid=oers.FADMINORGUNITID ");
  1388. selSql.append(" and adcount.FLAYERTYPEID='00000000-0000-0000-0000-00000000000362824988' ");
  1389. selSql.append(" order by adcount.fsortcode) FADMINORGUNITID ");
  1390. selSql.append(" ,oers.FLASTGRADELEVEL,(case when ppd.fid is null ");
  1391. selSql.append(" then (oers.FPERIODYEAR||'-01-'||'01')||'T'|| (oers.FPERIODYEAR||'-01-'||'01') ");
  1392. selSql.append(" else (to_char(ppd.FPSTARTDATE,'yyyy-MM-dd')||'T'||to_char(ppd.FPENDDATE,'yyyy-MM-dd')) end) PERIOD ");
  1393. selSql.append(" from T_EVA_OrgEvaResultSummary oers ");
  1394. selSql.append(" left join T_EVA_PerfPeriod ppd on ppd.fid = oers.FPERIODID ");
  1395. selSql.append(" where to_char(ppd.FPSTARTDATE,'yyyy-MM-dd') >= ? and to_char(ppd.FPENDDATE,'yyyy-MM-dd') <= ? ");
  1396. selSql.append(" and ppd.FCYCLETYPE = ? and ppd.FREFSTATUS = 100 and oers.FBILLSTATE='3' ");
  1397. String[] param = new String[]{startDate.format(DateTimeFormatter.ISO_LOCAL_DATE),
  1398. endDate.format(DateTimeFormatter.ISO_LOCAL_DATE), String.valueOf(cycletype.getValue())};
  1399. IRowSet rs = DbUtil.executeQuery(ctx, selSql.toString(), param);
  1400. int i = selSql.indexOf("?");
  1401. selSql.replace(i, i + 1, param[0]);
  1402. i = selSql.indexOf("?");
  1403. selSql.replace(i, i + 1, param[1]);
  1404. System.out.println(selSql);
  1405. while (rs.next()) {
  1406. Map<String, String> stringMap = Maps.newHashMap();
  1407. String orgId = rs.getString("FADMINORGUNITID");
  1408. String lastgradeLevel = rs.getString("FLASTGRADELEVEL");
  1409. String period = rs.getString("PERIOD");
  1410. stringMap.put("orgId", orgId);
  1411. stringMap.put("lastgradeLevel", lastgradeLevel);
  1412. stringMap.put("period", period);
  1413. mapMap.put(orgId, stringMap);
  1414. }
  1415. return mapMap;
  1416. }
  1417. public static void main(String[] args) {
  1418. List<String> idList = new ArrayList<>();
  1419. idList.add("W");
  1420. idList.add("A");
  1421. idList.add("C");
  1422. idList.add("B");
  1423. idList.add("D");
  1424. idList.add("S");
  1425. System.out.println(idList);
  1426. Collections.sort(idList);
  1427. System.out.println(idList);
  1428. BigDecimal personSize = BigDecimal.ZERO;
  1429. List<BigDecimal> bigsList = Lists.newArrayList();
  1430. BigDecimal bigD = BigDecimal.valueOf(1);
  1431. bigsList.add(bigD);
  1432. BigDecimal bigC = BigDecimal.valueOf(1);
  1433. bigsList.add(bigC);
  1434. BigDecimal bigB = BigDecimal.valueOf(1);
  1435. bigsList.add(bigB);
  1436. BigDecimal bigA = BigDecimal.valueOf(1);
  1437. bigsList.add(bigA);
  1438. BigDecimal bigS = BigDecimal.valueOf(1);
  1439. bigsList.add(bigS);
  1440. String ld = "S最多%s人,A最多%s人,B最多%s人,C最多%s人,D最多%s人,";
  1441. List<String> ldrs = Lists.newArrayList();
  1442. List<BigDecimal> bigs = Lists.newArrayList();
  1443. switch ("B") {
  1444. case "D":
  1445. personSize = personSize.add(bigD);
  1446. ldrs.add("D最多%s人,");
  1447. bigsList.remove(bigD);
  1448. case "C":
  1449. personSize = personSize.add(bigC);
  1450. ldrs.add("C最多%s人,");
  1451. bigsList.remove(bigC);
  1452. case "B":
  1453. personSize = personSize.add(bigB);
  1454. ldrs.add("B最多%s人,");
  1455. bigsList.remove(bigB);
  1456. case "A":
  1457. personSize = personSize.add(bigA);
  1458. ldrs.add("A最多%s人,");
  1459. bigsList.remove(bigA);
  1460. case "S":
  1461. personSize = personSize.add(bigS);
  1462. ldrs.add("S最多%s人,");
  1463. bigsList.remove(bigS);
  1464. }
  1465. System.out.println(personSize);
  1466. System.out.println(ldrs);
  1467. ldrs.remove(0);
  1468. for (String ldr : ldrs) {
  1469. ld = ld.replace(ldr, "");
  1470. }
  1471. System.out.println(ld);
  1472. System.out.println(bigs);
  1473. System.out.println(bigsList);
  1474. Map<String, Object> map = Maps.newHashMap();
  1475. String pstartdate = "2025-10-01";
  1476. String penddate = "2025-12-31";
  1477. int cycletype = 300;
  1478. LocalDate startDate = LocalDate.parse(pstartdate, DateTimeFormatter.ISO_LOCAL_DATE);
  1479. LocalDate endDate = LocalDate.parse(penddate, DateTimeFormatter.ISO_LOCAL_DATE);
  1480. EvalplanCycleTypeEnum cycleTypeEnum = EvalplanCycleTypeEnum.getEnum(cycletype);
  1481. if (EvalplanCycleTypeEnum.FULL_YEAR_VALUE == cycletype) {
  1482. //周期为年度
  1483. endDate = endDate.plusYears(-1);
  1484. startDate = startDate.plusYears(-1);
  1485. cycleTypeEnum = EvalplanCycleTypeEnum.FULL_YEAR;
  1486. } else if (EvalplanCycleTypeEnum.HALF_YEAR_VALUE == cycletype) {
  1487. //周期为半年度
  1488. endDate = endDate.plusMonths(-6);
  1489. startDate = startDate.plusMonths(-6);
  1490. cycleTypeEnum = EvalplanCycleTypeEnum.HALF_YEAR;
  1491. } else if (EvalplanCycleTypeEnum.QUARTER_VALUE == cycletype) {
  1492. //获取为季度
  1493. endDate = endDate.plusMonths(-3);
  1494. startDate = startDate.plusMonths(-3);
  1495. cycleTypeEnum = EvalplanCycleTypeEnum.QUARTER;
  1496. } else if (EvalplanCycleTypeEnum.MONTHLY_VALUE == cycletype) {
  1497. //获取为季度
  1498. endDate = endDate.plusMonths(-1);
  1499. startDate = startDate.plusMonths(-1);
  1500. cycleTypeEnum = EvalplanCycleTypeEnum.MONTHLY;
  1501. }
  1502. map.put("cycleType", cycleTypeEnum);
  1503. map.put("endDate", endDate);
  1504. map.put("startDate", startDate);
  1505. //System.out.println(map);
  1506. }
  1507. }