EvaResultSummaryManagerListHandlerExEx.java 86 KB

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