From c2f9a4dda6292700840ec00ba30a11de2c8e350f Mon Sep 17 00:00:00 2001 From: dxfeng Date: Sun, 8 Sep 2024 23:07:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=A2=E5=A4=AA=E9=98=B3POC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/api/htypoc/web/HtyController.java | 12 + src/com/engine/hty/web/HtyController.java | 92 +++++++ .../hty/modeexpand/activity/FlowUtil.java | 81 ++++++ .../activity/InitiateRatingExpand.java | 235 ++++++++++++++++++ .../RegistrationDistributionExpand.java | 215 ++++++++++++++++ 5 files changed, 635 insertions(+) create mode 100644 src/com/api/htypoc/web/HtyController.java create mode 100644 src/com/engine/hty/web/HtyController.java create mode 100644 src/weaver/formmode/hty/modeexpand/activity/FlowUtil.java create mode 100644 src/weaver/formmode/hty/modeexpand/activity/InitiateRatingExpand.java create mode 100644 src/weaver/formmode/hty/modeexpand/performance/RegistrationDistributionExpand.java diff --git a/src/com/api/htypoc/web/HtyController.java b/src/com/api/htypoc/web/HtyController.java new file mode 100644 index 0000000..a93160a --- /dev/null +++ b/src/com/api/htypoc/web/HtyController.java @@ -0,0 +1,12 @@ +package com.api.htypoc.web; + +import javax.ws.rs.Path; + +/** + * @author:dxfeng + * @createTime: 2024/09/08 + * @version: 1.0 + */ +@Path("/hty/poc") +public class HtyController extends com.engine.hty.web.HtyController{ +} diff --git a/src/com/engine/hty/web/HtyController.java b/src/com/engine/hty/web/HtyController.java new file mode 100644 index 0000000..0208694 --- /dev/null +++ b/src/com/engine/hty/web/HtyController.java @@ -0,0 +1,92 @@ +package com.engine.hty.web; + +import cn.hutool.core.convert.Convert; +import com.engine.common.util.ParamUtil; +import com.weaver.general.Util; +import org.apache.commons.collections.CollectionUtils; +import weaver.conn.RecordSet; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2024/09/08 + * @version: 1.0 + */ +public class HtyController { + + @GET + @Path("/getTotalScore") + @Produces(MediaType.APPLICATION_JSON) + public Map getTotalScore(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map map = ParamUtil.request2Map(request); + Map returnMap = new HashMap<>(); + returnMap.put("api_status", true); + + String khzq = Util.null2String((String) map.get("khzq")); + String xmkhry = Util.null2String((String) map.get("xmkhry")); + String xmpfqz = Util.null2String((String) map.get("xmpfqz")); + String gwzzpfqz = Util.null2String((String) map.get("gwzzpfqz")); + String gwzzpf = Util.null2String((String) map.get("gwzzpf")); + RecordSet rs = new RecordSet(); + List list = new ArrayList<>(); + // 考核周期。考核人员 + rs.executeQuery("select xmjldf from uf_xmkhpf where khzq = ? and xmkhry = ?", khzq, xmkhry); + while (rs.next()) { + list.add(Convert.toDouble(rs.getString("xmjldf"), 0D)); + + } + + if (CollectionUtils.isNotEmpty(list)) { + Double total = 0D; + for (Double i : list) { + total += i; + } + BigDecimal totalDecimal = BigDecimal.valueOf(total); + BigDecimal sizeDecimal = BigDecimal.valueOf(list.size()); + // 保留两位小数 + BigDecimal average = totalDecimal.divide(sizeDecimal, 2, RoundingMode.HALF_UP); + returnMap.put("average", average); + + // + Double xmpfqzInt = Convert.toDouble(xmpfqz, 0D); + if (xmpfqzInt == 0D) { + returnMap.put("api_status", false); + returnMap.put("msg", "项目评分权重转换失败"); + } + Double gwzzpfqzInt = Convert.toDouble(gwzzpfqz, 0D); + if (gwzzpfqzInt == 0D) { + returnMap.put("api_status", false); + returnMap.put("msg", "岗位职责评分权重转换失败"); + } + Double gwzzpfInt = Convert.toDouble(gwzzpf, 0D); + if (gwzzpfInt == 0D) { + returnMap.put("api_status", false); + returnMap.put("msg", "岗位职责评分转换失败"); + } + BigDecimal xmpfqzBig = BigDecimal.valueOf(xmpfqzInt).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); + + BigDecimal gwzzpfqzBig = BigDecimal.valueOf(gwzzpfqzInt).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); + + BigDecimal result1 = average.multiply(xmpfqzBig).setScale(2, RoundingMode.HALF_UP); + BigDecimal result2 = gwzzpfqzBig.multiply(BigDecimal.valueOf(gwzzpfInt)).setScale(2, RoundingMode.HALF_UP); + + returnMap.put("result", result1.add(result2)); + } + + + return returnMap; + } +} diff --git a/src/weaver/formmode/hty/modeexpand/activity/FlowUtil.java b/src/weaver/formmode/hty/modeexpand/activity/FlowUtil.java new file mode 100644 index 0000000..1920f35 --- /dev/null +++ b/src/weaver/formmode/hty/modeexpand/activity/FlowUtil.java @@ -0,0 +1,81 @@ +package weaver.formmode.hty.modeexpand.activity; + +import cn.hutool.core.convert.Convert; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.workflow.webservices.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2024/09/06 + * @version: 1.0 + */ +public class FlowUtil { + + public static String parseBlankToNull(String str) { + return StringUtils.isBlank(str) ? null : str; + } + + public static List> getRecordMapList(RecordSet rs) { + List> list = new ArrayList<>(); + while (rs.next()) { + String[] columnNames = rs.getColumnName(); + Map dataMap = new HashMap<>(); + for (String columnName : columnNames) { + dataMap.put(columnName.toLowerCase(), parseBlankToNull(rs.getString(columnName))); + } + list.add(dataMap); + } + return list; + } + + public static WorkflowRequestTableField createWorkflowRequestTableField(String fieldName, String fieldValue) { + WorkflowRequestTableField tableField = new WorkflowRequestTableField(); + tableField.setFieldName(fieldName); + tableField.setFieldValue(fieldValue); + tableField.setView(true); + tableField.setEdit(true); + return tableField; + } + + /** + * 创建流程 + * + * @param flowId + * @param title + * @param creatorId + * @param isNextFlow + * @param workflowMainTableInfo + * @param workflowDetailTableInfoArray + * @return + */ + public static String createWorkflow(String flowId, String title, String creatorId, String isNextFlow, WorkflowMainTableInfo workflowMainTableInfo, WorkflowDetailTableInfo[] workflowDetailTableInfoArray) { + WorkflowBaseInfo workflowBaseInfo = new WorkflowBaseInfo(); + workflowBaseInfo.setWorkflowId(flowId); + //工作流程请求信息 + WorkflowRequestInfo workflowRequestInfo = new WorkflowRequestInfo(); + //请求标题 + workflowRequestInfo.setRequestName(title); + //请求重要级别 + workflowRequestInfo.setRequestLevel("1"); + //显示 + workflowRequestInfo.setCanView(true); + //创建者id + workflowRequestInfo.setCreatorId(creatorId); + //工作流信息 + workflowRequestInfo.setWorkflowBaseInfo(workflowBaseInfo); + //主表 + workflowRequestInfo.setWorkflowMainTableInfo(workflowMainTableInfo); + workflowRequestInfo.setWorkflowDetailTableInfos(workflowDetailTableInfoArray); + //是否提交下一节点 + workflowRequestInfo.setIsnextflow(isNextFlow); + + WorkflowService workflow = new WorkflowServiceImpl(); + return workflow.doCreateWorkflowRequest(workflowRequestInfo, Convert.toInt(creatorId, 1)); + } +} diff --git a/src/weaver/formmode/hty/modeexpand/activity/InitiateRatingExpand.java b/src/weaver/formmode/hty/modeexpand/activity/InitiateRatingExpand.java new file mode 100644 index 0000000..6e4495e --- /dev/null +++ b/src/weaver/formmode/hty/modeexpand/activity/InitiateRatingExpand.java @@ -0,0 +1,235 @@ +package weaver.formmode.hty.modeexpand.activity; + +import com.alibaba.fastjson.JSON; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.common.DateUtil; +import weaver.conn.RecordSet; +import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.soa.workflow.request.*; +import weaver.workflow.webservices.WorkflowDetailTableInfo; +import weaver.workflow.webservices.WorkflowMainTableInfo; +import weaver.workflow.webservices.WorkflowRequestTableField; +import weaver.workflow.webservices.WorkflowRequestTableRecord; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static weaver.formmode.hty.modeexpand.activity.FlowUtil.*; + +/** + * @author:dxfeng + * @createTime: 2024/09/06 + * @version: 1.0 + */ +public class InitiateRatingExpand extends AbstractModeExpandJavaCodeNew { + private String FLOW_ID = "136"; + + @Override + public Map doModeExpand(Map param) { + Map result = new HashMap<>(2); + RecordSet rs = new RecordSet(); + try { + int billId; + int modeId; + RequestInfo requestInfo = (RequestInfo) param.get("RequestInfo"); + if (requestInfo != null) { + User user = (User) param.get("user"); + billId = Util.getIntValue(requestInfo.getRequestid()); + modeId = Util.getIntValue(requestInfo.getWorkflowid()); + if (billId > 0 && modeId > 0) { + Map mainDataMap = new HashMap<>(16); + MainTableInfo mainTableInfo = requestInfo.getMainTableInfo(); + Property[] properties = mainTableInfo.getProperty(); + for (Property property : properties) { + mainDataMap.put(property.getName(), property.getValue()); + } + List> detailList = new ArrayList<>(); + DetailTableInfo detailTableInfo = requestInfo.getDetailTableInfo(); + DetailTable detailTable = detailTableInfo.getDetailTable(0); + Row[] rows = detailTable.getRow(); + for (Row row : rows) { + Map detailDataMap = new HashMap<>(); + detailDataMap.put("id", row.getId()); + Cell[] cells = row.getCell(); + for (Cell cell : cells) { + String name = cell.getName(); + String value = cell.getValue(); + detailDataMap.put(name, value); + } + detailList.add(detailDataMap); + } + + // 遍历明细表数据、查询对应方案数据,创建流程 + String khnd = mainDataMap.get("khnd"); + String khjd = mainDataMap.get("khjd"); + for (Map detailItem : detailList) { + String activityDetailId = detailItem.get("id"); + String khry = detailItem.get("khry"); + matchPlanData(rs, user, activityDetailId, khnd, khjd, khry,String.valueOf(billId), FlowUtil.parseBlankToNull(mainDataMap.get("zpbz")),FlowUtil.parseBlankToNull(mainDataMap.get("zjsjqz")), FlowUtil.parseBlankToNull(mainDataMap.get("xxsjqz"))); + } + + } + } + } catch (Exception e) { + rs.writeLog(e); + result.put("errmsg", "添加评价人员拓展异常"); + result.put("flag", "false"); + } + return result; + } + + // 遍历数据创建流程 + + + /** + * @param rs + * @param khnd + * @param khjd + */ + private void matchPlanData(RecordSet rs, User user, String activityDetailId, String khnd, String khjd, String khry,String id,String zpbz,String zjsjqz,String xxsjqz) { + rs.executeQuery("select * from uf_khfahty where zrr = ? and nd = ? and jd = ? And formmodeid = 312", khry, khnd, khjd); + Map mainDataMap = new HashMap<>(); + String mainId = ""; + if (rs.next()) { + mainId = rs.getString("id"); + String[] columnNames = rs.getColumnName(); + for (String columnName : columnNames) { + mainDataMap.put(columnName.toLowerCase(), FlowUtil.parseBlankToNull(rs.getString(columnName))); + } + } + + // 未查到数据,或者主表ID,跳过该数据 + if (StringUtils.isBlank(mainId) || mainDataMap.isEmpty()) { + rs.writeLog("未匹配到方案数据,khnd==" + khnd + ",khjd==" + khjd + ",khry==" + khry); + return; + } + rs.writeLog("mainDataMap==="+ JSON.toJSONString(mainDataMap)); + + // 构建主表流程数据 + WorkflowRequestTableField[] workflowRequestTableField = { + createWorkflowRequestTableField("zrr", FlowUtil.parseBlankToNull(mainDataMap.get("zrr"))), + createWorkflowRequestTableField("gs", FlowUtil.parseBlankToNull(mainDataMap.get("gs"))), + createWorkflowRequestTableField("bm", FlowUtil.parseBlankToNull(mainDataMap.get("bm"))), + createWorkflowRequestTableField("gw", FlowUtil.parseBlankToNull(mainDataMap.get("gw"))), + createWorkflowRequestTableField("zrrsj", FlowUtil.parseBlankToNull(mainDataMap.get("zrrsj"))), + createWorkflowRequestTableField("zgld", FlowUtil.parseBlankToNull(mainDataMap.get("zgld"))), + createWorkflowRequestTableField("zgldsj", FlowUtil.parseBlankToNull(mainDataMap.get("zgldsj"))), + createWorkflowRequestTableField("xgld", FlowUtil.parseBlankToNull(mainDataMap.get("xgld"))), + createWorkflowRequestTableField("xgldsj", FlowUtil.parseBlankToNull(mainDataMap.get("xgldsj"))), + createWorkflowRequestTableField("khdf", FlowUtil.parseBlankToNull(mainDataMap.get("khdf"))), + createWorkflowRequestTableField("khdj", FlowUtil.parseBlankToNull(mainDataMap.get("khdj"))), + createWorkflowRequestTableField("kpiqz", FlowUtil.parseBlankToNull(mainDataMap.get("kpiqz"))), + createWorkflowRequestTableField("zdgzqz", FlowUtil.parseBlankToNull(mainDataMap.get("zdgzqz"))), + + + createWorkflowRequestTableField("khhd", id), + createWorkflowRequestTableField("nd", khnd), + createWorkflowRequestTableField("jd", khjd), + createWorkflowRequestTableField("zpfzb", zpbz), + createWorkflowRequestTableField("zgfzb", zjsjqz), + createWorkflowRequestTableField("xgfzb", xxsjqz) + }; + rs.writeLog("workflowRequestTableField=="+JSON.toJSONString(workflowRequestTableField)); + + WorkflowMainTableInfo workflowMainTableInfo = new WorkflowMainTableInfo(); + WorkflowRequestTableRecord[] workflowRequestTableRecord = new WorkflowRequestTableRecord[1]; + workflowMainTableInfo.setRequestRecords(workflowRequestTableRecord); + workflowRequestTableRecord[0] = new WorkflowRequestTableRecord(); + workflowRequestTableRecord[0].setWorkflowRequestTableFields(workflowRequestTableField); + + // 构建明细表数据 + WorkflowDetailTableInfo[] workflowDetailTableInfoArray = new WorkflowDetailTableInfo[3]; + workflowDetailTableInfoArray[0] = new WorkflowDetailTableInfo(); + workflowDetailTableInfoArray[1] = new WorkflowDetailTableInfo(); + workflowDetailTableInfoArray[2] = new WorkflowDetailTableInfo(); + + // 明细表一 + rs.executeQuery("select * from uf_khfahty_dt1 where mainid = ?", mainId); + List> detail1 = getRecordMapList(rs); + if (CollectionUtils.isNotEmpty(detail1)) { + WorkflowRequestTableRecord[] workflowRequestTableRecordDt = new WorkflowRequestTableRecord[detail1.size()]; + for (int i = 0; i < detail1.size(); i++) { + Map item = detail1.get(i); + WorkflowRequestTableField[] workflowRequestTableFieldDt = { + createWorkflowRequestTableField("zblx", item.get("zblx")), + createWorkflowRequestTableField("xh", item.get("xh")), + createWorkflowRequestTableField("khzb", item.get("khzb")), + createWorkflowRequestTableField("tqwcz", item.get("tqwcz")), + createWorkflowRequestTableField("bqdxz", item.get("bqdxz")), + createWorkflowRequestTableField("bqdbz", item.get("bqdbz")), + createWorkflowRequestTableField("bqtzz", item.get("bqtzz")), + createWorkflowRequestTableField("pfqz", item.get("pfqz")), + createWorkflowRequestTableField("khbz", item.get("khbz")), + createWorkflowRequestTableField("sjly", item.get("sjly")), + createWorkflowRequestTableField("zpf", item.get("zpf")), + createWorkflowRequestTableField("zgf", item.get("zgf")), + createWorkflowRequestTableField("xgf", item.get("xgf")), + createWorkflowRequestTableField("hjf", item.get("hjf")) + }; + workflowRequestTableRecordDt[i] = new WorkflowRequestTableRecord(); + workflowRequestTableRecordDt[i].setWorkflowRequestTableFields(workflowRequestTableFieldDt); + workflowDetailTableInfoArray[0].setWorkflowRequestTableRecords(workflowRequestTableRecordDt); + } + } + + + // 明细表二 + rs.executeQuery("select * from uf_khfahty_dt2 where mainid = ?", mainId); + List> detail2 = getRecordMapList(rs); + if (CollectionUtils.isNotEmpty(detail2)) { + WorkflowRequestTableRecord[] workflowRequestTableRecordDt = new WorkflowRequestTableRecord[detail1.size()]; + for (int i = 0; i < detail2.size(); i++) { + Map item = detail2.get(i); + WorkflowRequestTableField[] workflowRequestTableFieldDt = { + createWorkflowRequestTableField("zblx", item.get("zblx")), + createWorkflowRequestTableField("xh", item.get("xh")), + createWorkflowRequestTableField("zdgzrwmb", item.get("zdgzrwmb")), + createWorkflowRequestTableField("pfqz", item.get("pfqz")), + createWorkflowRequestTableField("pjbz", item.get("pjbz")), + createWorkflowRequestTableField("sjly", item.get("sjly")), + createWorkflowRequestTableField("zpf", item.get("zpf")), + createWorkflowRequestTableField("zgf", item.get("zgf")), + createWorkflowRequestTableField("xgf", item.get("xgf")), + createWorkflowRequestTableField("hjf", item.get("hjf")) + }; + workflowRequestTableRecordDt[i] = new WorkflowRequestTableRecord(); + workflowRequestTableRecordDt[i].setWorkflowRequestTableFields(workflowRequestTableFieldDt); + workflowDetailTableInfoArray[1].setWorkflowRequestTableRecords(workflowRequestTableRecordDt); + } + } + + // 明细表三 + rs.executeQuery("select * from uf_khfahty_dt3 where mainid = ?", mainId); + List> detail3 = getRecordMapList(rs); + if (CollectionUtils.isNotEmpty(detail3)) { + WorkflowRequestTableRecord[] workflowRequestTableRecordDt = new WorkflowRequestTableRecord[detail1.size()]; + for (int i = 0; i < detail3.size(); i++) { + Map item = detail3.get(i); + WorkflowRequestTableField[] workflowRequestTableFieldDt = { + createWorkflowRequestTableField("zblx", item.get("zblx")), + createWorkflowRequestTableField("xh", item.get("xh")), + createWorkflowRequestTableField("sxmc", item.get("sxmc")), + createWorkflowRequestTableField("pjbz", item.get("pjbz")), + createWorkflowRequestTableField("sjly", item.get("sjly")), + createWorkflowRequestTableField("zpf", item.get("zpf")), + createWorkflowRequestTableField("zgf", item.get("zgf")), + createWorkflowRequestTableField("xgf", item.get("xgf")), + createWorkflowRequestTableField("hjf", item.get("hjf")), + }; + workflowRequestTableRecordDt[i] = new WorkflowRequestTableRecord(); + workflowRequestTableRecordDt[i].setWorkflowRequestTableFields(workflowRequestTableFieldDt); + workflowDetailTableInfoArray[2].setWorkflowRequestTableRecords(workflowRequestTableRecordDt); + } + } + + String workflow = createWorkflow(FLOW_ID, "考核评分-" + user.getLastname() + "-" + DateUtil.getCurrentDate(), user.getUID() + "", "0", workflowMainTableInfo, workflowDetailTableInfoArray); + // 更新建模明细表流程ID + rs.executeUpdate("update uf_htyjxhd_dt1 set jxpflc = ? where id = ?", workflow, activityDetailId); + + } +} diff --git a/src/weaver/formmode/hty/modeexpand/performance/RegistrationDistributionExpand.java b/src/weaver/formmode/hty/modeexpand/performance/RegistrationDistributionExpand.java new file mode 100644 index 0000000..bf033b5 --- /dev/null +++ b/src/weaver/formmode/hty/modeexpand/performance/RegistrationDistributionExpand.java @@ -0,0 +1,215 @@ +package weaver.formmode.hty.modeexpand.performance; + +import cn.hutool.core.convert.Convert; +import com.alibaba.fastjson.JSON; +import weaver.conn.RecordSet; +import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew; +import weaver.soa.workflow.request.*; + +import java.util.*; + +/** + * @author:dxfeng + * @createTime: 2024/09/07 + * @version: 1.0 + */ +public class RegistrationDistributionExpand extends AbstractModeExpandJavaCodeNew { + @Override + public Map doModeExpand(Map param) { + Map resultMap = new HashMap<>(2); + RecordSet rs = new RecordSet(); + try { + int billId; + int modeId; + RequestInfo requestInfo = (RequestInfo) param.get("RequestInfo"); + if (requestInfo != null) { + { + + DetailTableInfo detailTableInfo = requestInfo.getDetailTableInfo(); + DetailTable detailTable0 = detailTableInfo.getDetailTable(0); + + List ruleList = new ArrayList<>(); + Row[] rows0 = detailTable0.getRow(); + for (Row row : rows0) { + Rule rule = new Rule(); + Cell[] cells = row.getCell(); + for (Cell cell : cells) { + String name = cell.getName(); + String value = cell.getValue(); + if ("jxdj".equals(name)) { + rule.setRuleName(value); + } else if ("fbbl".equals(name)) { + rule.setRuleRange(Double.parseDouble(value)); + } + + } + ruleList.add(rule); + } + + ruleList.forEach(item -> rs.writeLog(JSON.toJSONString(item))); + + + DetailTable detailTable1 = detailTableInfo.getDetailTable(1); + Row[] rows1 = detailTable1.getRow(); + List resultList = new ArrayList<>(); + for (Row row : rows1) { + Cell[] cells = row.getCell(); + Result result = new Result(); + result.setId(row.getId()); + for (Cell cell : cells) { + String name = cell.getName(); + String value = cell.getValue(); + if ("khzzdf".equals(name)) { + result.setScore(Convert.toInt(value, 0)); + } + } + resultList.add(result); + } + + // 所有人员排名 + LinkedHashSet rankSet = calculateRankings(resultList); + rs.writeLog("排名"); + resultList.forEach(item -> rs.writeLog(JSON.toJSONString(item))); + + ArrayList rankList = new ArrayList<>(rankSet); + // 根据排名,按照分部比例划分 + int subStart = 0; + double currentRange = 0.0; + for (int i = 0; i < ruleList.size(); i++) { + Rule rule = ruleList.get(i); + double ruleRange = rule.getRuleRange() / 100; + currentRange += ruleRange; + rs.writeLog("ruleRange==" + ruleRange); + rs.writeLog("currentRange==" + currentRange); + //int subEnd = subStart!=0?(int) Math.floor(rankList.size() * ruleRange):(int) Math.ceil(rankList.size() * ruleRange); + // 向下取 + int subEnd = (int) Math.floor(rankList.size() * currentRange); + if (i == 0 && subEnd < 1) { + subEnd = 1; + } + if (i == ruleList.size() && subEnd < ruleList.size()) { + subEnd = rankList.size(); + } + List rangeList = rankList.subList(subStart, subEnd); + for (Integer integer : rangeList) { + for (Result result : resultList) { + if (result.getRank().equals(integer)) { + result.setLevel(rule.getRuleName()); + } + } + } + subStart = subEnd; + } + + rs.writeLog("划分等级"); + + // 更新明细表 + String updateSql = "update uf_jxdjfb_dt2 set khdj = ? where id = ?"; + for (Result result : resultList) { + rs.writeLog(JSON.toJSONString(result)); + rs.executeUpdate(updateSql, result.getLevel(), result.getId()); + } + } + } + } catch (Exception e) { + rs.writeLog(e); + resultMap.put("errmsg", e.getMessage()); + resultMap.put("flag", "false"); + } + return resultMap; + } + + public static LinkedHashSet calculateRankings(List resultList) { + LinkedHashSet rankSet = new LinkedHashSet<>(); + + + resultList.sort((o1, o2) -> { + return o2.getScore().compareTo(o1.getScore()); // 按值(分数)降序排序 + }); + + // 计算排名并输出 + int rank = 1; + double prevScore = -1; + for (Result result : resultList) { + double score = result.getScore(); + if (score < prevScore) { + rank++; + } + prevScore = score; + result.setRank(rank); + rankSet.add(rank); + + } + + return rankSet; + } + + static class Rule { + String ruleName; + double ruleRange; + + public Rule() { + + } + + public Rule(String ruleName, double ruleRange) { + this.ruleName = ruleName; + this.ruleRange = ruleRange; + } + + public String getRuleName() { + return ruleName; + } + + public void setRuleName(String ruleName) { + this.ruleName = ruleName; + } + + public double getRuleRange() { + return ruleRange; + } + + public void setRuleRange(double ruleRange) { + this.ruleRange = ruleRange; + } + } + + static class Result { + String id; + Integer score; + String level; + Integer rank; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Integer getScore() { + return score; + } + + public void setScore(Integer score) { + this.score = score; + } + + public String getLevel() { + return level; + } + + public void setLevel(String level) { + this.level = level; + } + + public Integer getRank() { + return rank; + } + + public void setRank(Integer rank) { + this.rank = rank; + } + } +}