package weaver.interfaces.wysecond; import com.engine.wysecond.entity.PostionPoints; import com.weaver.general.Util; import weaver.common.DateUtil; import weaver.conn.RecordSet; import weaver.interfaces.schedule.BaseCronJob; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * @Author liang.cheng * @Date 2025/4/1 18:00 * @Description: 业务职务积分库更新 * @Version 1.0 */ public class PostionPointsUpdateCron extends BaseCronJob { @Override public void execute() { RecordSet rs = new RecordSet(); List pointsList = new ArrayList<>(); rs.executeQuery("select id,xm,zwdzlx,rbywzwcjqssj,rbywzwcjnx,rbywzwcjljjf from uf_ywzwxx"); while (rs.next()) { pointsList.add(PostionPoints.builder() .id(Util.getIntValue(rs.getString("id"))) .resourceId(Util.getIntValue(rs.getString("xm"))) .changeType(Util.getIntValue(rs.getString("zwdzlx"))) .jobStartDate(Util.null2String(rs.getString("rbywzwcjqssj"))) .jobYears(Util.null2String(rs.getString("rbywzwcjnx"))) .points(Util.getIntValue(rs.getString("rbywzwcjljjf"),0)) .build()); } List checkList = new ArrayList<>(); String year = DateUtil.getYear(); rs.executeQuery("select id,xm,khgzq,khjg from uf_khxx where khgzq = ?",year); while (rs.next()) { checkList.add(PostionPoints.builder() .id(Util.getIntValue(rs.getString("id"))) .resourceId(Util.getIntValue(rs.getString("xm"))) .year(Util.getIntValue(rs.getString("khgzq"))) .checkResult(Util.getIntValue(rs.getString("khjg"))) .build()); } // 处理考核结果表数据,按xm分组,筛选最新记录 Map resultMap = checkList.stream() .collect(Collectors.groupingBy( PostionPoints::getResourceId, Collectors.collectingAndThen( Collectors.maxBy( Comparator.comparingInt(PostionPoints::getYear) .thenComparingInt(PostionPoints::getId) .reversed() ), optional -> optional.orElse(null) ) )); //合并 pointsList.removeIf(point -> { PostionPoints matchedPoint = resultMap.get(point.getResourceId()); if (matchedPoint == null) { return true; // 如果在 resultMap 中找不到对应元素,返回 true 表示移除该元素 } if (matchedPoint.getYear() != null) { point.setYear(matchedPoint.getYear()); } if (matchedPoint.getCheckResult() != null) { point.setCheckResult(matchedPoint.getCheckResult()); } return false; }); //积分统计 任职年限计算 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 获取当前日期 Date currentDate = new Date(); for (PostionPoints point : pointsList) { try { // 计算任职年限 Date startDate = sdf.parse(point.getJobStartDate()); long diffInMillis = currentDate.getTime() - startDate.getTime(); long diffInDays = diffInMillis / (1000 * 60 * 60 * 24); double years = (double) diffInDays / 365; point.setJobYears(String.format("%.2f", years)); // 根据 checkResult 获取额外积分 int extraPoints; switch (point.getCheckResult()) { case 0: extraPoints = 3; break; case 1: extraPoints = 2; break; case 2: extraPoints = 1; break; default: extraPoints = 0; break; } if (point.getChangeType() == 0) { point.setPoints(extraPoints); } else if (point.getChangeType() == 1 || point.getChangeType() == 2) { point.setPoints(point.getPoints() + extraPoints); } rs.executeUpdate("update uf_ywzwxx set rbywzwcjnx = ?,rbywzwcjljjf = ? where id = ?",point.getJobYears(),point.getPoints(),point.getId()); } catch (ParseException e) { e.printStackTrace(); } } } }