EvaresultAuditBillEntryListHandlerEx.java 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888
  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.rabbitmq.guava.Lists;
  11. import com.kingdee.eas.hr.perf.PerformProTeamCollection;
  12. import com.kingdee.eas.hr.perf.PerformProTeamFactory;
  13. import com.kingdee.eas.hr.perf.PersonPerformProCollection;
  14. import com.kingdee.eas.hr.perf.PersonPerformProFactory;
  15. import com.kingdee.eas.util.app.DbUtil;
  16. import com.kingdee.jdbc.rowset.IRowSet;
  17. import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsBody;
  18. import com.kingdee.shr.base.syssetting.api.bean.BatchMessageTipsHeader;
  19. import com.kingdee.shr.base.syssetting.context.SHRContext;
  20. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  21. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  22. import com.kingdee.shr.perfweb.app.base.evalplan.EvaResultSumLogSourceEnum;
  23. import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException;
  24. import com.kingdee.shr.perfweb.app.resource.SHRPerfWebResource;
  25. import com.kingdee.shr.perfweb.exception.SHRPerfWebException;
  26. import com.kingdee.shr.perfweb.planexecute.handler.EvaresultAuditBillEntryListHandler;
  27. import com.kingdee.shr.perfweb.util.BOSWorkFlowUtil;
  28. import com.kingdee.shr.perfweb.util.EvaResultSummaryBillUtil;
  29. import com.kingdee.shr.perfweb.util.SHRPerfWebResourceUtil;
  30. import org.apache.commons.lang3.StringUtils;
  31. import org.slf4j.Logger;
  32. import org.slf4j.LoggerFactory;
  33. import org.springframework.ui.ModelMap;
  34. import javax.servlet.http.HttpServletRequest;
  35. import javax.servlet.http.HttpServletResponse;
  36. import java.math.BigDecimal;
  37. import java.sql.SQLException;
  38. import java.util.*;
  39. import java.util.stream.Collectors;
  40. /**
  41. * description: EvaresultAuditBillEntryListHandler <br>
  42. * date: 2025/6/24 12:48 <br>
  43. * author: lhbj <br>
  44. * version: 1.0 <br>
  45. */
  46. public class EvaresultAuditBillEntryListHandlerEx extends EvaresultAuditBillEntryListHandler {
  47. private static Logger logger = LoggerFactory.getLogger(EvaresultAuditBillEntryListHandlerEx.class);
  48. @Override
  49. protected void setInitData(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, Map<String, Object> initData) throws SHRWebException {
  50. super.setInitData(request, response, modelMap, initData);
  51. try {
  52. initData.put("performanceLevel", this.getPerformanceLevelByLevelAction(request, response, modelMap));
  53. } catch (Exception e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. public Map<String, Map<String, Object>> getPerformanceLevelByLevelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws ShrWebBizException {
  58. Map<String, Map<String, Object>> result = Maps.newHashMap();
  59. try {
  60. Context ctx = SHRContext.getInstance().getContext();
  61. String sql = "select CFLEVEL,CFCOEFFICIENT,CFMAXCOEFFICIENT,CFMINCOEFFICIENT from CT_PER_PerformanceLevel ";
  62. IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
  63. while (rs.next()) {
  64. Map<String, Object> map = Maps.newHashMap();
  65. String CFLEVEL = rs.getString("CFLEVEL");
  66. BigDecimal CFCOEFFICIENT = rs.getBigDecimal("CFCOEFFICIENT");
  67. BigDecimal CFMAXCOEFFICIENT = rs.getBigDecimal("CFMAXCOEFFICIENT");
  68. BigDecimal CFMINCOEFFICIENT = rs.getBigDecimal("CFMINCOEFFICIENT");
  69. map.put("level", CFLEVEL);
  70. map.put("coefficient", CFCOEFFICIENT);
  71. map.put("maxcoefficient", CFMAXCOEFFICIENT);
  72. map.put("mincoefficient", CFMINCOEFFICIENT);
  73. result.put(CFLEVEL, map);
  74. }
  75. } catch (Exception e) {
  76. e.printStackTrace();
  77. throw new ShrWebBizException(e.getMessage());
  78. }
  79. return result;
  80. }
  81. /**
  82. [{"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":"否"}]
  83. * @param request
  84. * @param response
  85. * @param modelMap
  86. * @throws SHRWebException
  87. */
  88. public void verifyBeforeSubmitAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
  89. String entryData = request.getParameter("entryData");
  90. BatchMessageTipsHeader header = new BatchMessageTipsHeader();
  91. boolean isExists = true;
  92. if (!com.kingdee.util.StringUtils.isEmpty(entryData)) {
  93. int success = 0;
  94. int fail = 0;
  95. StringBuilder ids = new StringBuilder();
  96. List<String> allIdList = new ArrayList<>();
  97. try {
  98. Context ctx = SHRContext.getInstance().getContext();
  99. //明细数据
  100. JSONArray entryList = JSON.parseArray(entryData);
  101. for(int i=0;i<entryList.size();i++) {
  102. JSONObject object = entryList.getJSONObject(i);
  103. BatchMessageTipsBody body = new BatchMessageTipsBody();
  104. String id =object.getString("id");
  105. boolean isSuccess=false;
  106. String msg="";
  107. String pnumber = object.getString("evaResult.pnumber");
  108. String pname = object.getString("evaResult.pname");
  109. String positionName = object.getString("evaResult.positionName");
  110. String evaResult = object.getString("evaResult.id");
  111. //修改后等级
  112. String auditGradeLevel = object.getString("evaResult.auditGradeLevel");
  113. if(StringUtils.isBlank(auditGradeLevel)){
  114. auditGradeLevel= object.getString("evaResult.gradeLevel");
  115. }
  116. body.setId(id);
  117. ids.append(id).append(",");
  118. allIdList.add(id);
  119. //获取跨部门协作绩效等级
  120. String sql = "select CFDEPGRADELEVEL from T_EVA_EvaResultSummary where fid = ?";
  121. IRowSet rs = DbUtil.executeQuery(ctx, sql, new String[]{evaResult});
  122. //当跨部门协作绩效等级为C、D等级的,当期员工绩效不得为高绩效(S、A等级)
  123. if (rs.next()){
  124. //跨部门协作绩效等级
  125. String depgradelevel = rs.getString("CFDEPGRADELEVEL");
  126. if(StringUtils.isNotBlank(depgradelevel)) {
  127. switch (depgradelevel) {
  128. case "S":
  129. ;
  130. case "A":
  131. ;
  132. case "B":
  133. isSuccess = true;
  134. msg = "校验通过";
  135. success += 1;
  136. break;
  137. case "C":
  138. case "D":
  139. if ("S".equals(auditGradeLevel) || "A".equals(auditGradeLevel)) {
  140. isSuccess = false;
  141. msg = "当跨部门协作绩效等级为C、D等级的,当期员工绩效不得为高绩效(S、A等级)";
  142. fail += 1;
  143. } else {
  144. isSuccess = true;
  145. msg = "校验通过";
  146. success += 1;
  147. }
  148. break;
  149. }
  150. }else {
  151. msg="没有当跨部门协作绩效等级,请先检查跨部门协作绩效等级";
  152. isSuccess=true;
  153. success+=1;
  154. }
  155. }else {
  156. msg="操作失败,数据异常";
  157. isSuccess=false;
  158. fail+=1;
  159. }
  160. body.setMuitTipsState(isSuccess);
  161. body.setMuitTipsMessage(msg);
  162. List<Object> messageListExt = new ArrayList<>();
  163. messageListExt.add(pnumber);
  164. messageListExt.add(pname);
  165. messageListExt.add(positionName);
  166. body.addMessageListExt(messageListExt);
  167. header.addResult(body);
  168. }
  169. } catch (BOSException | SQLException var7) {
  170. var7.printStackTrace();
  171. }
  172. ids.delete(ids.length()-1,ids.length());
  173. header.setBillId(ids.toString());
  174. header.setFailureCount(fail);
  175. header.setSuccessCount(success);
  176. }
  177. this.writeSuccessData(header);
  178. }
  179. protected static void addBatchMessageTip(String unvalidEvaObj, String message, BatchMessageTipsHeader batchMessageTipsHeader) {
  180. BatchMessageTipsBody body = new BatchMessageTipsBody();
  181. body.setId(unvalidEvaObj);
  182. body.setMuitTipsState(Boolean.FALSE);
  183. body.setMuitTipsMessage(message);
  184. batchMessageTipsHeader.addResult(body);
  185. batchMessageTipsHeader.setFailureCount(batchMessageTipsHeader.getFailureCount() + 1);
  186. }
  187. /**
  188. * 获取人员项目正态分布规则
  189. *
  190. * @param ctx
  191. * @param idList 非必填
  192. * @param batchMessage 非必填
  193. * @return
  194. * @throws BOSException
  195. * @throws SQLException
  196. */
  197. public Map<String, Map<String, BigDecimal>> getProjectPerformPro(Context ctx, List<String> idList, Map<String, String> batchMessage) throws BOSException, SQLException {
  198. //获取正态分布规则
  199. Map<String, Map<String, BigDecimal>> orgLevelMap = Maps.newHashMap();
  200. PerformProTeamCollection proCollection = PerformProTeamFactory.getLocalInstance(ctx).getPerformProTeamCollection(" where status=1 ");
  201. if (proCollection.size() == 1) {
  202. StringBuilder orgPerSql = new StringBuilder();
  203. orgPerSql.append(" select fp.fid,fpe.CFS,fpe.CFA,fpe.CFB,fpe.CFC,fpe.CFD,fpe.CFORGPERFORMTYPE ");
  204. orgPerSql.append(" from CT_PF_PerformProTeam fp ");
  205. orgPerSql.append(" left join CT_PF_PerformProTeamEntry fpe on fp.fid=fpe.FPARENTID ");
  206. orgPerSql.append(" where fp.CFSTATUS = 1 ");
  207. orgPerSql.append(" order by fp.FCREATETIME ");
  208. IRowSet rs = DbUtil.executeQuery(ctx, orgPerSql.toString());
  209. while (rs.next()) {
  210. Map<String, BigDecimal> objectMap = Maps.newHashMap();
  211. String type = rs.getString("CFORGPERFORMTYPE");
  212. objectMap.put("S", rs.getBigDecimal("CFS"));
  213. objectMap.put("A", rs.getBigDecimal("CFA"));
  214. objectMap.put("B", rs.getBigDecimal("CFB"));
  215. objectMap.put("C", rs.getBigDecimal("CFC"));
  216. objectMap.put("D", rs.getBigDecimal("CFD"));
  217. orgLevelMap.put(type, objectMap);
  218. }
  219. } else if (proCollection.size() > 1) {
  220. if (null != batchMessage && null != idList) {
  221. for (String key : idList) {
  222. batchMessage.put(key, "存在多个正态分布规则,请检查!");
  223. }
  224. }
  225. } else {
  226. if (null != batchMessage && null != idList) {
  227. for (String key : idList) {
  228. batchMessage.put(key, "不存在正态分布规则,请检查!");
  229. }
  230. }
  231. }
  232. return orgLevelMap;
  233. }
  234. /**
  235. * 获取人员组织正态分布规则
  236. *
  237. * @param ctx
  238. * @param idList 非必填
  239. * @param batchMessage 非必填
  240. * @return
  241. * @throws BOSException
  242. * @throws SQLException
  243. */
  244. public Map<String, Map<String, BigDecimal>> getPersonPerformPro(Context ctx, List<String> idList, Map<String, String> batchMessage) throws BOSException, SQLException {
  245. //获取正态分布规则
  246. Map<String, Map<String, BigDecimal>> orgLevelMap = Maps.newHashMap();
  247. PersonPerformProCollection proCollection = PersonPerformProFactory.getLocalInstance(ctx).getPersonPerformProCollection(" where state=1 ");
  248. if (proCollection.size() == 1) {
  249. StringBuilder orgPerSql = new StringBuilder();
  250. orgPerSql.append(" select fp.fid,fpe.CFS,fpe.CFA,fpe.CFB,fpe.CFC,fpe.CFD,fpe.CFORGPERFORMTYPE ");
  251. orgPerSql.append(" from CT_PF_PersonPerformPro fp ");
  252. orgPerSql.append(" left join CT_PF_PersonPerformProEntry fpe on fp.fid=fpe.FPARENTID ");
  253. orgPerSql.append(" where fp.CFSTATE = 1 ");
  254. orgPerSql.append(" order by fp.FCREATETIME ");
  255. IRowSet rs = DbUtil.executeQuery(ctx, orgPerSql.toString());
  256. while (rs.next()) {
  257. Map<String, BigDecimal> objectMap = Maps.newHashMap();
  258. String type = rs.getString("CFORGPERFORMTYPE");
  259. objectMap.put("S", rs.getBigDecimal("CFS"));
  260. objectMap.put("A", rs.getBigDecimal("CFA"));
  261. objectMap.put("B", rs.getBigDecimal("CFB"));
  262. objectMap.put("C", rs.getBigDecimal("CFC"));
  263. objectMap.put("D", rs.getBigDecimal("CFD"));
  264. orgLevelMap.put(type, objectMap);
  265. }
  266. } else if (proCollection.size() > 1) {
  267. if (null != batchMessage && null != idList) {
  268. for (String key : idList) {
  269. batchMessage.put(key, "存在多个正态分布规则,请检查!");
  270. }
  271. }
  272. } else {
  273. if (null != batchMessage && null != idList) {
  274. for (String key : idList) {
  275. batchMessage.put(key, "不存在正态分布规则,请检查!");
  276. }
  277. }
  278. }
  279. return orgLevelMap;
  280. }
  281. /**
  282. * 获取人员的等级组织分组
  283. *
  284. * @param ctx
  285. * @param entryList
  286. * @return
  287. * @throws BOSException
  288. * @throws SQLException
  289. */
  290. public Map<String, Map<String, Object>> getPersonLevelLensMap(Context ctx, JSONArray entryList) throws BOSException, SQLException {
  291. Map<String, Map<String, Object>> personLevelMap = Maps.newHashMap();
  292. Map<String, BigDecimal> revLevelMap = Maps.newHashMap();
  293. for(int i=0;i<entryList.size();i++) {
  294. JSONObject object = entryList.getJSONObject(i);
  295. String id =object.getString("id");
  296. String evaResult = object.getString("evaResult.id");
  297. //修改后等级
  298. String auditGradeLevel = object.getString("evaResult.auditGradeLevel");
  299. if(StringUtils.isBlank(auditGradeLevel)){
  300. auditGradeLevel= object.getString("evaResult.gradeLevel");
  301. }
  302. BigDecimal l = revLevelMap.get(auditGradeLevel);
  303. if(Objects.isNull(l)){
  304. l=BigDecimal.ZERO;
  305. }
  306. l=l.add(BigDecimal.ONE);
  307. revLevelMap.put(auditGradeLevel, l);
  308. }
  309. for(int i=0;i<entryList.size();i++) {
  310. JSONObject object = entryList.getJSONObject(i);
  311. String id =object.getString("id");
  312. String evaResult = object.getString("evaResult.id");
  313. //修改后等级
  314. String auditGradeLevel = object.getString("evaResult.auditGradeLevel");
  315. if(StringUtils.isBlank(auditGradeLevel)){
  316. auditGradeLevel= object.getString("evaResult.gradeLevel");
  317. }
  318. Map<String, Object> map = Maps.newHashMap();
  319. String key = auditGradeLevel;
  320. map.put("lens", revLevelMap.get(auditGradeLevel));
  321. map.put("id",id);
  322. map.put("evaResult",evaResult);
  323. map.put("revLevel",auditGradeLevel);
  324. personLevelMap.put(key, map);
  325. }
  326. return personLevelMap;
  327. }
  328. /**
  329. * 根据上季度的组织等级,校验当前周期,当前考核计划,所选员工的所属组织的员工绩效等级分布校验
  330. *
  331. * @param request
  332. * @param response
  333. * @param modelMap
  334. * @param batchMessageTipsHeader
  335. * @throws SHRWebException
  336. */
  337. public void beforeAuditEvaResutAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
  338. Context ctx = SHRContext.getInstance().getContext();
  339. String ids = (String) request.getParameter("ids");
  340. String period = (String) request.getParameter("period");
  341. String planId = (String) request.getParameter("planId");
  342. String entryData = request.getParameter("entryData");
  343. if (ids == null) {
  344. throw new ShrWebBizException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERR));
  345. }
  346. try {
  347. List<String> idList = Lists.newArrayList();
  348. Set<String> idSet = Sets.newHashSet(idList);
  349. for (String id : ids.split(",")) {
  350. idList.add(id);
  351. }
  352. //明细数据
  353. JSONArray entryList = JSON.parseArray(entryData);
  354. StringBuilder planSql = new StringBuilder();
  355. planSql.append("select fid,CFPerobjectIdId from T_EVA_PerfPlan where fid=? and CFPerobjectIdId is not null ");
  356. IRowSet rs = DbUtil.executeQuery(ctx, planSql.toString(), new Object[]{planId});
  357. if (rs.next()) {
  358. String CFPerobjectIdId = rs.getString("CFPerobjectIdId");
  359. Map<String, String> batchMessage = this.beforeAuditProjectEvaResut(ctx, period, planId, idList,entryList);
  360. if (null != batchMessage && batchMessage.size() > 0) {
  361. for (Map.Entry<String, String> entry : batchMessage.entrySet()) {
  362. addBatchMessageTip(entry.getKey(), entry.getValue(), batchMessageTipsHeader);
  363. idSet.remove(entry.getKey());
  364. }
  365. }
  366. } else {
  367. Map<String, String> batchMessage = this.beforeAuditEvaResut(ctx, period, planId, idList,entryList);
  368. if (null != batchMessage && batchMessage.size() > 0) {
  369. for (Map.Entry<String, String> entry : batchMessage.entrySet()) {
  370. addBatchMessageTip(entry.getKey(), entry.getValue(), batchMessageTipsHeader);
  371. idSet.remove(entry.getKey());
  372. }
  373. }
  374. //addBatchMessageSuccessTips(idSet,"验证成功",batchMessageTipsHeader);
  375. }
  376. this.setSuccessMessage("验证成功");
  377. } catch (Exception e) {
  378. e.printStackTrace();
  379. throw new ShrWebBizException(e);
  380. }
  381. }
  382. public Map<String, String> beforeAuditProjectEvaResut(Context ctx, String period, String planId, List<String> idList,JSONArray entryList ) throws BOSException, SQLException {
  383. Map<String, String> batchMessage = Maps.newHashMap();
  384. StringBuilder selParamId = new StringBuilder("''");
  385. for (int i = 0; i < idList.size(); i++) {
  386. selParamId.append(",?");
  387. }
  388. //获取正态分布规则
  389. Map<String, Map<String, BigDecimal>> personPerformMap = this.getProjectPerformPro(ctx, idList, batchMessage);
  390. if (null != personPerformMap && personPerformMap.size() > 0) {
  391. //获取组织分组人数
  392. //Map<String, Map<String, String>> orgLevelMap = this.getProjectLevelCountMap(ctx, period, planId,selParamId, idList);
  393. //获取人员等级分组
  394. Map<String, Map<String, Object>> personLevelMap = this.getPersonLevelLensMap(ctx,entryList);
  395. BigDecimal big100 = new BigDecimal(100);
  396. for(int i=0;i<entryList.size();i++) {
  397. JSONObject object = entryList.getJSONObject(i);
  398. String fid =object.getString("id");
  399. String evaResult = object.getString("evaResult.id");
  400. //修改后等级
  401. String auditGradeLevel = object.getString("evaResult.auditGradeLevel");
  402. if(StringUtils.isBlank(auditGradeLevel)){
  403. auditGradeLevel= object.getString("evaResult.gradeLevel");
  404. }
  405. String revLevel = auditGradeLevel;
  406. if (StrUtil.isBlank(auditGradeLevel)) {
  407. batchMessage.put(fid, "绩效等级为空,请维护");
  408. continue;
  409. }
  410. StringBuilder sel = new StringBuilder();
  411. sel.append(" select s1.fid,ppm.CFPROJECTNAME, pp.CFPerobjectIdId, s1.FPERIODID, s1.FEVAPLANID,");
  412. sel.append(" isnull(s1.FREVISEGRADELEVEL,s1.FGRADELEVEL) revLevel,s1.CFProjectLevel ");
  413. sel.append(" from T_EVA_EvaResultSummary s1 ");
  414. sel.append(" left join T_EVA_PerfPlan pp on pp.fid = s1.FEVAPLANID ");
  415. sel.append(" left join CT_PRO_ProjectManagement ppm on ppm.fid = pp.CFPerobjectIdId ");
  416. sel.append(" where s1.fid in ('");
  417. sel.append(evaResult);
  418. sel.append("') ");
  419. IRowSet rs = DbUtil.executeQuery(ctx, sel.toString(), idList.toArray());
  420. if (!rs.next()){
  421. batchMessage.put(fid, "绩效等级为空,请维护");
  422. continue;
  423. }
  424. String CFPROJECTNAME = rs.getString("CFPROJECTNAME");
  425. if (StrUtil.isBlank(revLevel)) {
  426. //String msg = String.format("%s绩效等级为空", CFPROJECTNAME);
  427. batchMessage.put(fid, "绩效等级为空,请维护");
  428. continue;
  429. }
  430. //项目绩效等级
  431. String projectLevel = rs.getString("CFProjectLevel");
  432. if (StrUtil.isBlank(projectLevel)) {
  433. String msg = String.format("%s项目绩效等级为空", CFPROJECTNAME);
  434. batchMessage.put(fid, msg);
  435. continue;
  436. }
  437. //该组织的组织绩效等级的正态分布
  438. Map<String, BigDecimal> personPerform = personPerformMap.get(projectLevel);
  439. if (null == personPerform) {
  440. String msg = String.format("没有找到%s项目绩效等级%s的正态分布规则", CFPROJECTNAME, projectLevel);
  441. batchMessage.put(fid, msg);
  442. continue;
  443. }
  444. //获取该组织下的人员总数
  445. //Map<String, String> orgMap = orgLevelMap.get(key);
  446. //获取该组织下的人员各个绩效等级分组汇总
  447. // String keyRevLevel = FADMINORGUNITID + FPERIODID + FEVAPLANID + revLevel;
  448. // Map<String, String> personMap = personLevelMap.get(keyRevLevel);
  449. Map<String, BigDecimal> leveList = Maps.newHashMap();
  450. //获取该组织下的人员总数
  451. //Map<String, String> orgMap = orgLevelMap.get(key);
  452. //获取等级D人数
  453. String keyRevLevelD = "D";
  454. Map<String, Object> personMapD = personLevelMap.get(keyRevLevelD);
  455. BigDecimal dLens = BigDecimal.ZERO;
  456. if (null != personMapD) {
  457. dLens = (BigDecimal) personMapD.get("lens");
  458. leveList.put("D", dLens);
  459. }
  460. //获取等级C人数
  461. String keyRevLevelC = "C";
  462. Map<String, Object> personMapC = personLevelMap.get(keyRevLevelC);
  463. BigDecimal cLens = BigDecimal.ZERO;
  464. if (null != personMapC) {
  465. cLens = (BigDecimal) personMapC.get("lens");
  466. leveList.put("C", cLens);
  467. }
  468. //获取等级B人数
  469. String keyRevLevelB = "B";
  470. Map<String, Object> personMapB = personLevelMap.get(keyRevLevelB);
  471. BigDecimal bLens = BigDecimal.ZERO;
  472. if (null != personMapB) {
  473. bLens = (BigDecimal) personMapB.get("lens");
  474. leveList.put("B", bLens);
  475. }
  476. //获取等级A人数
  477. String keyRevLevelA = "A";
  478. Map<String, Object> personMapA = personLevelMap.get(keyRevLevelA);
  479. BigDecimal aLens = BigDecimal.ZERO;
  480. if (null != personMapA) {
  481. aLens = (BigDecimal) personMapA.get("lens");
  482. leveList.put("A", aLens);
  483. }
  484. //获取等级S人数
  485. String keyRevLevelS = "S";
  486. Map<String, Object> personMapS = personLevelMap.get(keyRevLevelS);
  487. BigDecimal sLens = BigDecimal.ZERO;
  488. if (null != personMapS) {
  489. sLens = (BigDecimal) personMapS.get("lens");
  490. leveList.put("S", sLens);
  491. }
  492. //总人数
  493. BigDecimal alls = new BigDecimal(idList.size());
  494. //当前等级正态分布比例
  495. BigDecimal scale = personPerform.get(revLevel);
  496. //创建每个等级的人数列表
  497. Map<String, BigDecimal> bigsList = Maps.newHashMap();
  498. BigDecimal bigS = ((personPerform.get("S").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
  499. bigsList.put("S", bigS);
  500. BigDecimal bigA = ((personPerform.get("A").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
  501. bigsList.put("A", bigA);
  502. BigDecimal bigB = ((personPerform.get("B").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
  503. bigsList.put("B", bigB);
  504. BigDecimal bigC = ((personPerform.get("C").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
  505. bigsList.put("C", bigC);
  506. BigDecimal bigD = ((personPerform.get("D").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
  507. bigsList.put("D", bigD);
  508. //已占用数
  509. BigDecimal lens = BigDecimal.ZERO;
  510. //进行额度加减
  511. BigDecimal personSize = BigDecimal.ZERO;
  512. BigDecimal personMaxSize = BigDecimal.ZERO;
  513. BigDecimal personMinSize = BigDecimal.ZERO;
  514. List<String> ldrs = Lists.newArrayList();
  515. Map<String,String> ldrcd = Maps.newHashMap();
  516. switch (revLevel) {
  517. case "A":
  518. personSize = personSize.add(bigA).subtract(aLens);
  519. lens = lens.add(aLens);
  520. if ("A".equals(revLevel)) {
  521. personMaxSize = personMaxSize.add((bigA));
  522. } else {
  523. personMaxSize = personMaxSize.add((bigA).subtract(aLens));
  524. }
  525. ldrs.add("A最多%A人,");
  526. //bigsList.remove("A");
  527. case "S":
  528. personSize = personSize.add(bigS).subtract(sLens);
  529. lens = lens.add(sLens);
  530. if ("S".equals(revLevel)) {
  531. personMaxSize = personMaxSize.add((bigS));
  532. } else {
  533. personMaxSize = personMaxSize.add((bigS).subtract(sLens));
  534. }
  535. ldrs.add("S最多%S人,");
  536. //bigsList.remove("S");
  537. case "B":
  538. case "C":
  539. if ("C".equals(revLevel)) {
  540. personMinSize = personMinSize.add((bigC));
  541. } else {
  542. personMinSize = personMinSize.add((bigC).subtract(cLens));
  543. }
  544. ldrcd.put("C","C最少"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"人,");
  545. //bigsList.remove("C");
  546. case "D":
  547. if ("D".equals(revLevel)) {
  548. personMinSize = personMinSize.add((bigD));
  549. } else {
  550. personMinSize = personMinSize.add((bigD).subtract(dLens));
  551. }
  552. ldrcd.put("D","D最少"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"人,");
  553. }
  554. String ld = "当前周期绩效等级为%l的人数为%maxs人,";
  555. if (personMinSize.compareTo(BigDecimal.ZERO) > 0 || personSize.compareTo(BigDecimal.ZERO) < 0) {
  556. if(ldrs.size()>0) {
  557. String ldrstr = ldrs.get(0);
  558. ld += ldrstr;
  559. ld = ld.replace("%" + revLevel, (personMaxSize.compareTo(BigDecimal.ZERO) > 0 ? (personMaxSize) : BigDecimal.ZERO).toPlainString());
  560. }
  561. ld = ld.replace("%l", revLevel);
  562. ld = ld.replace("%maxs", (leveList.get(revLevel) == null ? BigDecimal.ZERO : leveList.get(revLevel)).toPlainString());
  563. for (Map.Entry<String,String> entry : ldrcd.entrySet()) {
  564. String eKey = entry.getKey();
  565. String ldr= entry.getValue();
  566. ld += ldr;
  567. }
  568. ld += "请修正后重新审核.";
  569. batchMessage.put(fid, ld);
  570. }
  571. }
  572. }
  573. return batchMessage;
  574. }
  575. /**
  576. * 结果直接审核、结果工作流审核,绩效等级分布比例校验人数由整个绩效考核计划的人数改为按选择的人数进行分布比例校验。
  577. *
  578. * @param ctx
  579. * @param period
  580. * @param planId
  581. * @param idList
  582. * @return
  583. * @throws BOSException
  584. * @throws SQLException
  585. */
  586. public Map<String, String> beforeAuditEvaResut(Context ctx, String period, String planId, List<String> idList,JSONArray entryList) throws BOSException, SQLException {
  587. Map<String, String> batchMessage = Maps.newHashMap();
  588. StringBuilder selParamId = new StringBuilder("''");
  589. for (int i = 0; i < idList.size(); i++) {
  590. selParamId.append(",?");
  591. }
  592. //获取正态分布规则
  593. Map<String, Map<String, BigDecimal>> personPerformMap = this.getPersonPerformPro(ctx, idList, batchMessage);
  594. if (null != personPerformMap && personPerformMap.size() > 0) {
  595. //获取组织分组人数
  596. //Map<String, Map<String, String>> orgLevelMap = this.getOrgLevelCountMap(ctx, period, planId);
  597. //获取人员等级分组
  598. Map<String, Map<String, Object>> personLevelMap = this.getPersonLevelLensMap(ctx, entryList);
  599. BigDecimal big100 = new BigDecimal(100);
  600. for(int i=0;i<entryList.size();i++) {
  601. JSONObject object = entryList.getJSONObject(i);
  602. String fid = object.getString("id");
  603. String evaResult = object.getString("evaResult.id");
  604. //修改后等级
  605. String auditGradeLevel = object.getString("evaResult.auditGradeLevel");
  606. if(StringUtils.isBlank(auditGradeLevel)){
  607. auditGradeLevel= object.getString("evaResult.gradeLevel");
  608. }
  609. if (StrUtil.isBlank(auditGradeLevel)) {
  610. batchMessage.put(fid, "绩效等级为空,请维护");
  611. continue;
  612. }
  613. StringBuilder sel = new StringBuilder();
  614. sel.append(" select ers.fid,ers.FADMINORGNAME, ");
  615. sel.append(" ers.FPERIODID, ers.FEVAPLANID,isnull(ers.FREVISEGRADELEVEL, ers.FGRADELEVEL) revLevel,ers.CFOrgLevel ");
  616. sel.append(" from T_EVA_EvaResultSummary ers where ers.fid = '");
  617. sel.append(evaResult);
  618. sel.append("' ");
  619. IRowSet rs = DbUtil.executeQuery(ctx, sel.toString());
  620. String orgLevel="";
  621. String FADMINORGNAME ="";
  622. //上季度组织绩效等级
  623. if (rs.next()){
  624. orgLevel = rs.getString("CFOrgLevel");
  625. FADMINORGNAME = rs.getString("FADMINORGNAME");
  626. if (StringUtils.isBlank(orgLevel)) {
  627. String msg = String.format("%s上季度组织绩效等级为空", FADMINORGNAME);
  628. batchMessage.put(fid, msg);
  629. continue;
  630. }
  631. }
  632. //该组织的组织绩效等级的正态分布
  633. Map<String, BigDecimal> personPerform = personPerformMap.get(orgLevel);
  634. if (null == personPerform) {
  635. String msg = String.format("没有找到%s上季度组织绩效等级%s的正态分布规则", FADMINORGNAME, orgLevel);
  636. batchMessage.put(fid, msg);
  637. continue;
  638. }
  639. //获取该组织下的人员总数
  640. //Map<String, String> orgMap = orgLevelMap.get(key);
  641. Map<String, BigDecimal> leveList = Maps.newHashMap();
  642. //获取等级D人数
  643. String keyRevLevelD = "D";
  644. Map<String, Object> personMapD = personLevelMap.get(keyRevLevelD);
  645. BigDecimal dLens = BigDecimal.ZERO;
  646. if (null != personMapD) {
  647. dLens = (BigDecimal) personMapD.get("lens");
  648. leveList.put("D", dLens);
  649. }
  650. //获取等级C人数
  651. String keyRevLevelC = "C";
  652. Map<String, Object> personMapC = personLevelMap.get(keyRevLevelC);
  653. BigDecimal cLens = BigDecimal.ZERO;
  654. if (null != personMapC) {
  655. cLens = (BigDecimal) personMapC.get("lens");
  656. leveList.put("C", cLens);
  657. }
  658. //获取等级B人数
  659. String keyRevLevelB = "B";
  660. Map<String, Object> personMapB = personLevelMap.get(keyRevLevelB);
  661. BigDecimal bLens = BigDecimal.ZERO;
  662. if (null != personMapB) {
  663. bLens = (BigDecimal) personMapB.get("lens");
  664. leveList.put("B", bLens);
  665. }
  666. //获取等级A人数
  667. String keyRevLevelA = "A";
  668. Map<String, Object> personMapA = personLevelMap.get(keyRevLevelA);
  669. BigDecimal aLens = BigDecimal.ZERO;
  670. if (null != personMapA) {
  671. aLens = (BigDecimal) personMapA.get("lens");
  672. leveList.put("A", aLens);
  673. }
  674. //获取等级S人数
  675. String keyRevLevelS = "S";
  676. Map<String, Object> personMapS = personLevelMap.get(keyRevLevelS);
  677. BigDecimal sLens = BigDecimal.ZERO;
  678. if (null != personMapS) {
  679. sLens = (BigDecimal) personMapS.get("lens");
  680. leveList.put("S", sLens);
  681. }
  682. System.out.println("leveList:"+leveList);
  683. //总人数
  684. BigDecimal alls = new BigDecimal(idList.size());
  685. //当前等级正态分布比例
  686. BigDecimal scale = personPerform.get(auditGradeLevel);
  687. //创建每个等级的人数列表
  688. Map<String, BigDecimal> bigsList = Maps.newHashMap();
  689. BigDecimal bigS = ((personPerform.get("S").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
  690. bigsList.put("S", bigS);
  691. BigDecimal bigA = ((personPerform.get("A").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
  692. bigsList.put("A", bigA);
  693. BigDecimal bigB = ((personPerform.get("B").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
  694. bigsList.put("B", bigB);
  695. BigDecimal bigC = ((personPerform.get("C").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
  696. bigsList.put("C", bigC);
  697. BigDecimal bigD = ((personPerform.get("D").divide(big100, BigDecimal.ROUND_HALF_UP, BigDecimal.ROUND_HALF_UP)).multiply(alls).setScale(0, BigDecimal.ROUND_HALF_UP));
  698. bigsList.put("D", bigD);
  699. System.out.println("bigsList:"+bigsList);
  700. //已占用数
  701. BigDecimal lens = BigDecimal.ZERO;
  702. //进行额度加减
  703. //if ("S".equals(revLevel) || "A".equals(revLevel)||"B".equals(revLevel) || "C".equals(revLevel) || "D".equals(revLevel)) {
  704. BigDecimal personSize = BigDecimal.ZERO;
  705. BigDecimal personMaxSize = BigDecimal.ZERO;
  706. BigDecimal personMinSize = BigDecimal.ZERO;
  707. List<String> ldrs = Lists.newArrayList();
  708. Map<String,String> ldrcd = Maps.newHashMap();
  709. switch (auditGradeLevel) {
  710. case "A":
  711. personSize = personSize.add(bigA).subtract(aLens);
  712. lens = lens.add(aLens);
  713. if ("A".equals(auditGradeLevel)) {
  714. personMaxSize = personMaxSize.add((bigA));
  715. } else {
  716. personMaxSize = personMaxSize.add((bigA).subtract(aLens));
  717. }
  718. ldrs.add("A最多%A人,");
  719. //bigsList.remove("A");
  720. case "S":
  721. personSize = personSize.add(bigS).subtract(sLens);
  722. lens = lens.add(sLens);
  723. if ("S".equals(auditGradeLevel)) {
  724. personMaxSize = personMaxSize.add((bigS));
  725. } else {
  726. personMaxSize = personMaxSize.add((bigS).subtract(sLens));
  727. }
  728. ldrs.add("S最多%S人,");
  729. //bigsList.remove("S");
  730. case "B":
  731. case "C":
  732. if ("C".equals(auditGradeLevel)) {
  733. personMinSize = personMinSize.add((bigC));
  734. } else {
  735. personMinSize = personMinSize.add((bigC).subtract(cLens));
  736. }
  737. ldrcd.put("C","C最少"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"人,");
  738. //bigsList.remove("C");
  739. case "D":
  740. // if (bigD.compareTo(dLens) > 0) {
  741. // ldrcd.add("D最少" + bigD.toPlainString() + "人,");
  742. // }
  743. if ("D".equals(auditGradeLevel)) {
  744. personMinSize = personMinSize.add((bigD));
  745. } else {
  746. personMinSize = personMinSize.add((bigD).subtract(dLens));
  747. }
  748. ldrcd.put("D","D最少"+(personMinSize.compareTo(BigDecimal.ZERO) > 0?personMinSize.toPlainString():'0')+"人,");
  749. }
  750. String ld = "当前周期绩效等级为%l的人数为%maxs人,";
  751. if (personMinSize.compareTo(BigDecimal.ZERO) > 0 || personSize.compareTo(BigDecimal.ZERO) < 0) {
  752. if(ldrs.size()>0){
  753. String ldrstr = ldrs.get(0);
  754. ld += ldrstr;
  755. ld = ld.replace("%" + auditGradeLevel, (personMaxSize.compareTo(BigDecimal.ZERO) > 0 ? (personMaxSize) : BigDecimal.ZERO).toPlainString());
  756. }
  757. ld = ld.replace("%l", auditGradeLevel);
  758. ld = ld.replace("%maxs", (leveList.get(auditGradeLevel) == null ? BigDecimal.ZERO : leveList.get(auditGradeLevel)).toPlainString());
  759. for (Map.Entry<String,String> entry : ldrcd.entrySet()) {
  760. String eKey = entry.getKey();
  761. String ldr= entry.getValue();
  762. ld += ldr;
  763. }
  764. ld += "请修正后重新审核.";
  765. batchMessage.put(fid, ld);
  766. }
  767. }
  768. }
  769. return batchMessage;
  770. }
  771. public void batchSaveReviseDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, BatchMessageTipsHeader batchMessageTipsHeader) throws SHRWebException {
  772. Context ctx = SHRContext.getInstance().getContext();
  773. String assignmentID = request.getParameter("assignmentID");
  774. String billId = request.getParameter("billId");
  775. if (!StringUtils.isEmpty(assignmentID) && !StringUtils.isEmpty(billId)) {
  776. List evaResultIds = (List)Arrays.stream(billId.split(",")).collect(Collectors.toList());
  777. try {
  778. Map<String, Object> auditingNode = BOSWorkFlowUtil.isAuditingNode(ctx, assignmentID);
  779. if (!"1".equals(auditingNode.get("isAuditing"))) {
  780. logger.error("current node is not auditing -- {}", StringUtils.defaultString(assignmentID));
  781. addBatchMessageTips(evaResultIds, SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.CANNOTREVISESCOREBYNOTAUDITING, ctx), batchMessageTipsHeader);
  782. return;
  783. }
  784. } catch (Exception var17) {
  785. logger.error("", var17);
  786. throw new ShrWebBizException(SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.CANNOTREVISESCOREBYNOTAUDITING, ctx));
  787. }
  788. String datas = request.getParameter("datas");
  789. if (!StringUtils.isEmpty(datas)) {
  790. List<HashMap> reviseDataList = JSONArray.parseArray(datas, HashMap.class);
  791. Iterator var11 = reviseDataList.iterator();
  792. while(var11.hasNext()) {
  793. HashMap map = (HashMap)var11.next();
  794. String id = (String)map.get("id");
  795. String id_id = (String)map.get("id_id");
  796. try {
  797. request.setAttribute("toRevisedId", id);
  798. request.setAttribute("reviseScore", map.get("reviseSumScore"));
  799. request.setAttribute("reviseLevel", map.get("reviseGradeLevel"));
  800. request.setAttribute("reviseReason", map.get("reviseReason"));
  801. Map<String, Object> saveReturnData = EvaResultSummaryBillUtil.saveReviseData(ctx, request, response, false, EvaResultSumLogSourceEnum.AUDITING);
  802. if ("500".equals(saveReturnData.get("result"))) {
  803. addBatchMessageTip(id, SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SAVEFAILED, ctx), batchMessageTipsHeader);
  804. }
  805. } catch (SHRPerfWebException var15) {
  806. logger.error("saveReviseData is error", var15);
  807. addBatchMessageTip(id, var15.getMessage(), batchMessageTipsHeader);
  808. } catch (Exception var16) {
  809. logger.error("saveReviseData is error", var16);
  810. addBatchMessageTip(id, SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SAVEFAILED, ctx), batchMessageTipsHeader);
  811. }
  812. try {
  813. request.setAttribute("toRevisedId", id);
  814. request.setAttribute("reviseScore", map.get("reviseSumScore"));
  815. request.setAttribute("reviseLevel", map.get("reviseGradeLevel"));
  816. request.setAttribute("reviseReason", map.get("reviseReason"));
  817. request.setAttribute("perCoefficient", map.get("perCoefficient"));
  818. String coefficient = "0";
  819. String perCoefficient = "0";
  820. String perMaxCoefficient = "0";
  821. String perMinCoefficient = "0";
  822. if(map.get("coefficient") instanceof BigDecimal){
  823. coefficient = ((BigDecimal) map.get("coefficient")).toPlainString();
  824. } else {
  825. coefficient = map.get("coefficient").toString();
  826. }
  827. if(map.get("perCoefficient") instanceof BigDecimal){
  828. perCoefficient = ((BigDecimal) map.get("perCoefficient")).toPlainString();
  829. } else {
  830. perCoefficient = map.get("perCoefficient").toString();
  831. }
  832. if(map.get("perMaxCoefficient") instanceof BigDecimal){
  833. perMaxCoefficient = ((BigDecimal) map.get("perMaxCoefficient")).toPlainString();
  834. } else {
  835. perMaxCoefficient = map.get("perMaxCoefficient").toString();
  836. }
  837. if(map.get("perMinCoefficient") instanceof BigDecimal){
  838. perMinCoefficient = ((BigDecimal) map.get("perMinCoefficient")).toPlainString();
  839. } else {
  840. perMinCoefficient = map.get("perMinCoefficient").toString();
  841. }
  842. if(null!=perCoefficient) {
  843. DbUtil.execute(ctx, "update T_EVA_EvaResultSummary set CFPERMAXCOEFFICIENT='"+perMaxCoefficient
  844. +"', CFPerMinCoefficient='"+perMinCoefficient +"', CFperCoefficient='" + perCoefficient
  845. +"', CFcoefficient='"+coefficient+"' where fid = '" + id + "'");
  846. }
  847. } catch (Exception var16) {
  848. logger.error("saveReviseData is error", var16);
  849. //addBatchMessageTip(id, SHRPerfWebResourceUtil.getRes(SHRPerfWebResource.SAVEFAILED, ctx), batchMessageTipsHeader);
  850. }
  851. }
  852. }
  853. } else {
  854. logger.error("assignmentID is null or billId is null");
  855. }
  856. }
  857. }