EvaresultAuditBillEntryListHandlerEx.java 49 KB

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