EvaResultSummaryFileExService.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. package com.kingdee.eas.hr.perf.handler.importService;
  2. import com.google.common.collect.Maps;
  3. import com.kingdee.bos.BOSException;
  4. import com.kingdee.bos.Context;
  5. import com.kingdee.eas.basedata.person.PersonInfo;
  6. import com.kingdee.eas.common.EASBizException;
  7. import com.kingdee.eas.framework.CoreBaseInfo;
  8. import com.kingdee.eas.util.app.DbUtil;
  9. import com.kingdee.jdbc.rowset.IRowSet;
  10. import com.kingdee.shr.base.syssetting.app.io.fileImport.BaseColumnInfo;
  11. import com.kingdee.shr.base.syssetting.app.io.fileImport.BaseRowInfo;
  12. import com.kingdee.shr.base.syssetting.app.io.fileImport.ImportException;
  13. import com.kingdee.shr.base.syssetting.context.SHRContext;
  14. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  15. import com.kingdee.shr.compensation.util.CmpSQLUtil;
  16. import com.kingdee.shr.perfweb.app.base.evalplan.*;
  17. import com.kingdee.shr.perfweb.app.base.perfmancescore.PerfScorLevelDefineCollection;
  18. import com.kingdee.shr.perfweb.app.base.perfmancescore.PerfScorLevelDefineFactory;
  19. import com.kingdee.shr.perfweb.app.base.perfmancescore.PerfScorLevelDefineInfo;
  20. import com.kingdee.shr.perfweb.app.exception.SHRPerfWebBizException;
  21. import com.kingdee.shr.perfweb.service.EvaResultSummaryFileService;
  22. import com.kingdee.shr.perfweb.util.EvaResultSumRevisionLogService;
  23. import com.kingdee.shr.perfweb.util.GetEntityInfoUtils;
  24. import com.kingdee.shr.perfweb.util.SHRPerfWebResourceUtil;
  25. import com.kingdee.shr.perfweb.utils.AESUtil;
  26. import com.kingdee.shr.perfweb.utils.PerfWorkFlowUtils;
  27. import com.kingdee.util.StringUtils;
  28. import org.apache.poi.ss.usermodel.CellStyle;
  29. import org.apache.poi.ss.usermodel.DataFormat;
  30. import org.apache.poi.ss.usermodel.DataValidationHelper;
  31. import org.apache.poi.ss.util.CellRangeAddressList;
  32. import org.apache.poi.xssf.usermodel.*;
  33. import org.slf4j.Logger;
  34. import org.slf4j.LoggerFactory;
  35. import org.springframework.ui.ModelMap;
  36. import javax.servlet.http.HttpServletRequest;
  37. import javax.servlet.http.HttpServletResponse;
  38. import java.math.BigDecimal;
  39. import java.net.URLDecoder;
  40. import java.sql.SQLException;
  41. import java.sql.Timestamp;
  42. import java.text.DecimalFormat;
  43. import java.util.Iterator;
  44. import java.util.Map;
  45. import java.util.Set;
  46. /**
  47. * description: EvaResultSummaryFileExService <br>
  48. * date: 2025/10/15 10:09 <br>
  49. * author: lhbj <br>
  50. * version: 1.0 <br>
  51. *
  52. */
  53. public class EvaResultSummaryFileExService extends EvaResultSummaryFileService {
  54. Map<String, Map<String, Object>> performanceLevel;
  55. public EvaResultSummaryFileExService(){
  56. this.performanceLevel=this.getPerformanceLevelByLevel();
  57. }
  58. private static Logger logger = LoggerFactory.getLogger(EvaResultSummaryFileExService.class);
  59. protected void initFillColumn() {
  60. super.initFillColumn();
  61. // this.fillColumn.add("ID");
  62. // this.fillColumn.add("pnumber");
  63. // this.fillColumn.add("pname");
  64. // this.fillColumn.add("hrOrgUnit");
  65. // this.fillColumn.add("positionName");
  66. // this.fillColumn.add("company");
  67. // this.fillColumn.add("department");
  68. // this.fillColumn.add("flowStatus");
  69. // this.fillColumn.add("sumScore");
  70. // this.fillColumn.add("gradeLevel");
  71. // this.fillColumn.add("reviseSumScore");
  72. // this.fillColumn.add("reviseGradeLevel");
  73. // this.fillColumn.add("reviseReason");
  74. // this.fillColumn.add("employeeType");
  75. this.fillColumn.add("coefficient");
  76. this.fillColumn.add("perCoefficient");
  77. this.fillColumn.add("reviseBfCoefficient");
  78. this.fillColumn.add("perMaxCoefficient");
  79. this.fillColumn.add("perMinCoefficient");
  80. }
  81. public void completeGenerateExcel(Map<String, BaseColumnInfo> columnInfoMap, XSSFWorkbook wb, XSSFSheet sheet) {
  82. String isNeedEmpty = this.getCustomParam("isNeedEmpty");
  83. if ("1".equals(isNeedEmpty)) {
  84. int beginRow = 4;
  85. int i = beginRow;
  86. short row_heigth = 300;
  87. Map<Integer, String> columnIndexFn = this.getColumnIndexFn(columnInfoMap);
  88. Set<Integer> keyNumSet = columnIndexFn.keySet();
  89. DataFormat format = wb.createDataFormat();
  90. CellStyle testStyle = wb.createCellStyle();
  91. testStyle.setDataFormat(format.getFormat("@"));
  92. for(int columnIndex = 0; columnIndex < columnInfoMap.size(); ++columnIndex) {
  93. sheet.setDefaultColumnStyle(columnIndex, testStyle);
  94. }
  95. String sql = this.buildQuerySql();
  96. System.out.println("buildQuerySql2:"+sql);
  97. if (!StringUtils.isEmpty(sql)) {
  98. String perfScoreLevelId = null;
  99. try {
  100. IRowSet rs = CmpSQLUtil.executeQuery(this.getContext(), sql);
  101. for(DecimalFormat df = new DecimalFormat("#.##"); rs.next(); ++i) {
  102. if (perfScoreLevelId == null) {
  103. perfScoreLevelId = rs.getString("perfScorLevel");
  104. }
  105. XSSFRow row = sheet.createRow(i);
  106. row.setHeight(row_heigth);
  107. String value;
  108. XSSFCell cell;
  109. for(Iterator var20 = keyNumSet.iterator(); var20.hasNext(); cell.setCellValue(value)) {
  110. int columnIndex = (Integer)var20.next();
  111. cell = row.createCell(columnIndex);
  112. String propName = (String)columnIndexFn.get(columnIndex);
  113. value = rs.getString(propName);
  114. if ("flowStatus".equals(propName) && !StringUtils.isEmpty(value)) {
  115. PerfEvaObjectWFStatusEnum wFStatusEnum = PerfEvaObjectWFStatusEnum.getEnum(Integer.valueOf(value));
  116. if (null != wFStatusEnum) {
  117. value = wFStatusEnum.getAlias();
  118. }
  119. } else if (("reviseSumScore".equals(propName) || "sumScore".equals(propName)) && !StringUtils.isEmpty(value)) {
  120. value = df.format(Float.valueOf(value));
  121. }
  122. }
  123. }
  124. if (!StringUtils.isEmpty(perfScoreLevelId)) {
  125. int reviseGradeIndex = -1;
  126. Iterator var31 = keyNumSet.iterator();
  127. while(var31.hasNext()) {
  128. Integer index = (Integer)var31.next();
  129. if ("reviseGradeLevel".equals(columnIndexFn.get(index))) {
  130. reviseGradeIndex = index;
  131. break;
  132. }
  133. }
  134. if (reviseGradeIndex > 0) {
  135. PerfScorLevelDefineCollection levelColl = PerfScorLevelDefineFactory.getRemoteInstance().getPerfScorLevelDefineCollection("select perfLevelName where perfScoreLevel='" + perfScoreLevelId + "' order by perfLevelName");
  136. if (!levelColl.isEmpty()) {
  137. DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
  138. String[] validata = new String[levelColl.size()];
  139. for(i = 0; i < levelColl.size(); ++i) {
  140. validata[i] = levelColl.get(i).getString("perfLevelName");
  141. }
  142. XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint)dataValidationHelper.createExplicitListConstraint(validata);
  143. CellRangeAddressList addressList = new CellRangeAddressList(beginRow, 500, reviseGradeIndex, reviseGradeIndex);
  144. XSSFDataValidation validation = (XSSFDataValidation)dataValidationHelper.createValidation(dvConstraint, addressList);
  145. sheet.addValidationData(validation);
  146. }
  147. }
  148. }
  149. } catch (BOSException var27) {
  150. logger.error("", var27);
  151. throw new ImportException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERROCCURED));
  152. } catch (SQLException var28) {
  153. logger.error("", var28);
  154. throw new ImportException(new SHRPerfWebBizException(SHRPerfWebBizException.SYSTEMERROCCURED));
  155. }
  156. }
  157. }
  158. }
  159. protected void importUpdateOnly(BaseRowInfo row) throws ImportException {
  160. CoreBaseInfo coreBaseInfo = this.transRowToObejct(row);
  161. Context ctx = this.getContext();
  162. try {
  163. Map<String, Map<String, Object>> performanceLevel = this.getPerformanceLevelByLevel();
  164. String id = coreBaseInfo.getString("ID");
  165. IEvaResultSummary iEvaResultSummary = EvaResultSummaryFactory.getLocalInstance(ctx);
  166. EvaResultSummaryInfo evaResultSummaryInfo = GetEntityInfoUtils.getEvaResultSummaryInfoById(ctx, id);
  167. String reviseScore = null;
  168. String sumScore = null;
  169. EvaResultSummaryInfo old = GetEntityInfoUtils.getEvaResultSummaryInfoById(ctx, id);
  170. reviseScore = old.get("reviseSumScore") == null ? null : old.get("reviseSumScore").toString();
  171. sumScore = old.get("sumScore") == null ? null : old.get("sumScore").toString();
  172. String reviseLevel = old.getReviseGradeLevel();
  173. try {
  174. if (reviseScore == null) {
  175. reviseScore = sumScore;
  176. reviseLevel = old.getGradeLevel();
  177. }
  178. } catch (Exception var14) {
  179. logger.error(var14.toString());
  180. }
  181. if (null != coreBaseInfo.getString("reviseSumScore")) {
  182. evaResultSummaryInfo.put("reviseSumScore", (double)coreBaseInfo.getFloat("reviseSumScore"));
  183. } else {
  184. evaResultSummaryInfo.put("reviseSumScore", (Object)null);
  185. }
  186. if (null != coreBaseInfo.getString("reviseGradeLevel")) {
  187. evaResultSummaryInfo.setReviseGradeLevel(coreBaseInfo.getString("reviseGradeLevel"));
  188. } else {
  189. evaResultSummaryInfo.put("reviseGradeLevel", (Object)null);
  190. }
  191. evaResultSummaryInfo.setReviseReason(coreBaseInfo.getString("reviseReason"));
  192. if (null != evaResultSummaryInfo.getEvaObj()) {
  193. try {
  194. PerfScorLevelDefineInfo scoreLevelDefineInfo = PerfWorkFlowUtils.getPerfScoreLevelDefineInfo(ctx, evaResultSummaryInfo.getEvaObj().getId().toString(), evaResultSummaryInfo.getReviseGradeLevel());
  195. if (null != scoreLevelDefineInfo && null != scoreLevelDefineInfo.getId()) {
  196. evaResultSummaryInfo.put("perfScorLevelDefine", scoreLevelDefineInfo.getId().toString());
  197. }
  198. } catch (BOSException var13) {
  199. logger.error("", var13);
  200. }
  201. }
  202. //绩效系数
  203. if (null != coreBaseInfo.getBigDecimal("perCoefficient")) {
  204. BigDecimal perCoefficient = coreBaseInfo.getBigDecimal("perCoefficient");
  205. String reviseGradeLevel = coreBaseInfo.getString("gradeLevel");
  206. if (null != coreBaseInfo.getString("reviseGradeLevel")) {
  207. reviseGradeLevel= coreBaseInfo.getString("reviseGradeLevel");
  208. }
  209. Map<String, Object> pLevel=performanceLevel.get(reviseGradeLevel);
  210. BigDecimal coefficient = (BigDecimal) pLevel.get("coefficient");
  211. BigDecimal maxcoefficient = (BigDecimal) pLevel.get("maxcoefficient");
  212. BigDecimal mincoefficient = (BigDecimal) pLevel.get("mincoefficient");
  213. if(!(perCoefficient.compareTo(maxcoefficient)<=0&&perCoefficient.compareTo(mincoefficient)>=0)){
  214. throw new ImportException("所修改的绩效系数" + perCoefficient.toPlainString() + ",大于最大绩效系数" + maxcoefficient.toPlainString() + "或者小于最小绩效系数" + mincoefficient.toPlainString() + "!");
  215. }else {
  216. evaResultSummaryInfo.put("coefficient",coefficient);
  217. evaResultSummaryInfo.put("reviseBfCoefficient",evaResultSummaryInfo.get("perCoefficient"));
  218. evaResultSummaryInfo.setBigDecimal("auditPerCoefficient",perCoefficient);
  219. evaResultSummaryInfo.put("perCoefficient",perCoefficient);
  220. evaResultSummaryInfo.put("perMaxCoefficient",maxcoefficient);
  221. evaResultSummaryInfo.put("perMinCoefficient",mincoefficient);
  222. }
  223. }
  224. evaResultSummaryInfo.setCalibrationTime((Timestamp)null);
  225. evaResultSummaryInfo.setCalibrater((PersonInfo)null);
  226. evaResultSummaryInfo.setCalibrationStatus(CalibrationStatusEnum.UNCALIBRATED);
  227. iEvaResultSummary.save(evaResultSummaryInfo);
  228. if (evaResultSummaryInfo != null && evaResultSummaryInfo != null && evaResultSummaryInfo.getEvaObj() != null) {
  229. try {
  230. EvaResultSumRevisionLogService evaResultSumRevisionLogService = new EvaResultSumRevisionLogService();
  231. evaResultSumRevisionLogService.generatedEvaResultSumRevisionLog(ctx, EvaResultSumLogSourceEnum.IMPORTREVISION, evaResultSummaryInfo, reviseScore, reviseLevel);
  232. } catch (Exception var12) {
  233. logger.error(var12.getMessage());
  234. }
  235. }
  236. } catch (BOSException var15) {
  237. logger.error("", var15);
  238. } catch (EASBizException var16) {
  239. logger.error("", var16);
  240. }
  241. }
  242. protected String buildQuerySql() {
  243. Context ctx = this.getContext();
  244. String encryptDynamicSql = this.getCustomParam("dynamicSql");
  245. String dynamicSql = "";
  246. if (StringUtils.isEmpty(encryptDynamicSql)) {
  247. System.out.println("dynamicSql1:"+dynamicSql);
  248. return dynamicSql;
  249. } else {
  250. try {
  251. logger.error("encryptDynamicSql: " + encryptDynamicSql);
  252. String decodeStr = URLDecoder.decode(encryptDynamicSql, "UTF-8");
  253. logger.error("decodeStr: " + decodeStr);
  254. dynamicSql = AESUtil.decryptToString(decodeStr, "EvaResultSummaryQuery");
  255. System.out.println("dynamicSql2:"+dynamicSql);
  256. } catch (Exception var11) {
  257. logger.error("【PERFWEB-EvaResultSummaryFileService#buildQuerySql】it's fail to build the export sql!");
  258. logger.error("", var11);
  259. System.out.println("dynamicSql3:"+dynamicSql);
  260. return dynamicSql;
  261. }
  262. int fromIndex = dynamicSql.indexOf("FROM", 0);
  263. int orderIndex = dynamicSql.indexOf("ORDER", 0);
  264. String fromToOrder = dynamicSql.substring(fromIndex - 1, orderIndex);
  265. String orderToLast = dynamicSql.substring(orderIndex - 1, dynamicSql.length());
  266. StringBuilder sql = new StringBuilder();
  267. String mlFlag = SHRPerfWebResourceUtil.getMlFlag(ctx);
  268. sql.append("SELECT ").append("\"EVARESULTSUMMARY\".FID AS \"ID\",")
  269. .append("\"EVARESULTSUMMARY\".FPnumber AS \"pnumber\",")
  270. .append("\"PERSON\".FName" + mlFlag + " AS \"pname\",")
  271. .append("\"HRORGUNIT\".FName" + mlFlag + " AS \"hrOrgUnit\",")
  272. .append("\"POSITION\".FName" + mlFlag + " AS \"positionName\",")
  273. .append("\"COMPANY\".FName" + mlFlag + " AS \"company\",")
  274. .append("\"DEPARTMENT\".FName" + mlFlag + " AS \"department\",")
  275. .append("\"EVAOBJ\".FWorkFlowStatus AS \"flowStatus\",")
  276. .append("\"EVARESULTSUMMARY\".FSumScore AS \"sumScore\",")
  277. .append("\"EVARESULTSUMMARY\".FGradeLevel AS \"gradeLevel\",")
  278. .append("\"EVARESULTSUMMARY\".FReviseSumScore AS \"reviseSumScore\",")
  279. .append("\"EVARESULTSUMMARY\".FReviseGradeLevel AS \"reviseGradeLevel\",")
  280. .append("\"EVARESULTSUMMARY\".FReviseReason AS \"reviseReason\",")
  281. .append("\"EVARESULTSUMMARY\".CFcoefficient AS \"coefficient\",")
  282. .append("\"EVARESULTSUMMARY\".CFperCoefficient AS \"perCoefficient\",")
  283. .append("\"EVARESULTSUMMARY\".CFperMaxCoefficient AS \"perMaxCoefficient\",")
  284. .append("\"EVARESULTSUMMARY\".CFperMinCoefficient AS \"perMinCoefficient\",")
  285. .append("\"EVARESULTSUMMARY\".CFreviseBfCoefficient AS \"reviseBfCoefficient\",")
  286. .append("\"EMPLOYEETYPE\".FName" + mlFlag + " AS \"employeeType\",")
  287. .append("\"EVARESULTSUMMARY\".FPerfScorLevelID AS \"perfScorLevel\" ").append(fromToOrder);
  288. String selectIds = this.getCustomParam("selectIds");
  289. if (!StringUtils.isEmpty(selectIds)) {
  290. sql.append(" and \"EVARESULTSUMMARY\".FID in('" + selectIds.replace(",", "','") + "') ");
  291. }
  292. sql.append(" and \"EVARESULTSUMMARY\".FBillState <> '3'");
  293. sql.append(" ORDER BY ").append("\"ADMINORGUNIT\".FSortCode ASC,").append("\"ADMINORGUNIT\".FLongNumber ASC,").append("\"POSITION\".FIndex ASC,").append("\"POSITION\".FNumber ASC,").append("\"PERSON\".FIndex ASC,").append("\"PERSON\".FNumber ASC");
  294. System.out.println("buildQuerySql4:"+sql);
  295. return sql.toString();
  296. }
  297. }
  298. public Map<String, Map<String, Object>> getPerformanceLevelByLevel() throws ImportException {
  299. Map<String, Map<String, Object>> result = Maps.newHashMap();
  300. try {
  301. Context ctx = SHRContext.getInstance().getContext();
  302. String sql = "select CFLEVEL,CFCOEFFICIENT,CFMAXCOEFFICIENT,CFMINCOEFFICIENT from CT_PER_PerformanceLevel ";
  303. IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
  304. while (rs.next()) {
  305. Map<String, Object> map = Maps.newHashMap();
  306. String CFLEVEL = rs.getString("CFLEVEL");
  307. BigDecimal CFCOEFFICIENT = rs.getBigDecimal("CFCOEFFICIENT");
  308. BigDecimal CFMAXCOEFFICIENT = rs.getBigDecimal("CFMAXCOEFFICIENT");
  309. BigDecimal CFMINCOEFFICIENT = rs.getBigDecimal("CFMINCOEFFICIENT");
  310. map.put("level", CFLEVEL);
  311. map.put("coefficient", CFCOEFFICIENT);
  312. map.put("maxcoefficient", CFMAXCOEFFICIENT);
  313. map.put("mincoefficient", CFMINCOEFFICIENT);
  314. result.put(CFLEVEL, map);
  315. }
  316. } catch (Exception e) {
  317. e.printStackTrace();
  318. throw new ImportException(e.getMessage());
  319. }
  320. return result;
  321. }
  322. }