EvaResultSummaryManagerListHandlerExEx.java 103 KB

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