EvaResultSummaryManagerListHandlerExEx.java 94 KB

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