当前位置: 首页 > wzjs >正文

网站共享备案可以申请支付接口怎么创建网站免费建立个人网站

网站共享备案可以申请支付接口,怎么创建网站免费建立个人网站,合肥哪里有做网站的,黄冈网站目的:减少数据库压力 传统解决方案 获取拖拽后元素的前一个元素的位置,重新排序后面的所有元素,如果没有前一个元素,则统一全排。 例如:将item1拖拽到item6之后,按顺序排列可以不处理item6及之前的数据&a…

在这里插入图片描述在这里插入图片描述
目的:减少数据库压力

传统解决方案

获取拖拽后元素的前一个元素的位置,重新排序后面的所有元素,如果没有前一个元素,则统一全排。
例如:将item1拖拽到item6之后,按顺序排列可以不处理item6及之前的数据,但是必须重新处理item1及之后所有的数据。
在这里插入图片描述

位置间隔法

获取拖拽后前一个元素和后一个元素,设置当前顺序为中间数值,不用修改其他元素,如果顺序过于紧密则出发重平衡机制。
这里需要几个参数:初始值(BASE_SCORE),间隔(INITIAL_INTERVAL),平衡参数(MIN_GAP )。
1.第一个元素作为初始值
2.当新添加一个元素时,取最大值+间隔
3.当修改顺序时,计算相邻项目的中间值作为新元素顺序值。
4.当新元素值与前后元素间隔小于平衡参数时,触发重平衡。

初始数据

@Entity
public class SortableItem {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;// 使用Double类型存储分数(也可用BigDecimal提高精度)private Double sortScore;// 其他业务字段private String name;private boolean visible;// 初始分数分配@PrePersistpublic void initializeSortScore() {if (this.sortScore == null) {// 获取当前最大分数Double maxScore = repository.findMaxSortScore();this.sortScore = (maxScore != null) ? maxScore + INITIAL_INTERVAL : BASE_SCORE;}}// 常量定义private static final Double BASE_SCORE = 1000000.0;private static final Double INITIAL_INTERVAL = 10000.0;
}

插入移动实现

@Service
public class FractionalSortService {// 最小允许间隔(避免浮点精度问题)private static final Double MIN_GAP = 0.0001;@Transactionalpublic void moveItem(Long itemId, Long prevId, Long nextId) {SortableItem movingItem = itemRepository.findById(itemId).orElseThrow();SortableItem prevItem = prevId != null ? itemRepository.findById(prevId).orElse(null) : null;SortableItem nextItem = nextId != null ? itemRepository.findById(nextId).orElse(null) : null;// 计算新分数Double newScore = calculateNewScore(prevItem, nextItem);// 检查是否需要重平衡if (requiresRebalance(prevItem, newScore, nextItem)) {rebalanceItems(prevItem, nextItem);// 重新计算新位置newScore = calculateNewScore(prevItem, nextItem);}// 更新分数movingItem.setSortScore(newScore);itemRepository.save(movingItem);}private Double calculateNewScore(SortableItem prev, SortableItem next) {Double prevScore = (prev != null) ? prev.getSortScore() : 0.0;Double nextScore = (next != null) ? next.getSortScore() : prevScore + 2 * INITIAL_INTERVAL;// 简单情况:有足够间隔if (nextScore - prevScore > MIN_GAP) {return (prevScore + nextScore) / 2.0;}// 复杂情况:使用扩展范围算法return extendedRangeCalculation(prevScore, nextScore);}private Double extendedRangeCalculation(Double prevScore, Double nextScore) {// 使用对数刻度扩展范围double range = nextScore - prevScore;double logRange = Math.log(range);// 在指数空间计算中点double midLog = (Math.log(prevScore) + Math.log(nextScore)) / 2;return Math.exp(midLog);}private boolean requiresRebalance(SortableItem prev, Double newScore, SortableItem next) {if (prev != null && (newScore - prev.getSortScore()) < MIN_GAP) {return true;}if (next != null && (next.getSortScore() - newScore) < MIN_GAP) {return true;}return false;}
}

重平衡实现

private void rebalanceItems(SortableItem startItem, SortableItem endItem) {// 获取需要重平衡的范围List<SortableItem> items = findItemsBetween(startItem, endItem);if (items.size() < 2) return;// 计算总范围和步长double startScore = items.get(0).getSortScore();double endScore = items.get(items.size()-1).getSortScore();double totalRange = endScore - startScore;double step = totalRange / (items.size() + 1);// 分配新分数for (int i = 0; i < items.size(); i++) {SortableItem item = items.get(i);item.setSortScore(startScore + step * (i + 1));}// 批量保存itemRepository.saveAll(items);
}private List<SortableItem> findItemsBetween(SortableItem start, SortableItem end) {// 根据业务需求确定范围大小int neighborCount = 50; // 前后各取50个项目List<SortableItem> before = itemRepository.findPreviousItems(start != null ? start.getId() : null, neighborCount);List<SortableItem> after = itemRepository.findNextItems(end != null ? end.getId() : null,neighborCount);// 合并结果List<SortableItem> result = new ArrayList<>();result.addAll(before);if (start != null) result.add(start);if (end != null) result.add(end);result.addAll(after);// 按分数排序result.sort(Comparator.comparingDouble(SortableItem::getSortScore));return result;
}

重平衡策略选择:

局部重平衡:仅重平衡受影响区域(推荐)
全局重平衡:定期重排整个列表(维护时使用)
局部更新可以选择传入位置前后50条重新等间隔排序。

在这里插入图片描述
此文助力马上行计划管理WEB端四象限拖拽处理。

欢迎体验微信小程序:马上行计划管理
在这里插入图片描述

WEB端在紧锣密鼓的开发中敬请期待

参考
codesandbox.io
react-beautiful-dnd

http://www.dtcms.com/wzjs/201531.html

相关文章:

  • 做期货应关注什么网站国外免费推广平台有哪些
  • 国外做网站公司能赚钱吗重庆高端seo
  • 网站设计模板图35个成功的市场营销策划案例
  • 商丘推广公司seo算法入门教程
  • 保定市建设计网站seo的宗旨是什么
  • 牡丹区住房和城乡建设局网站搜索引擎营销的案例
  • 辽宁建设工程信息网业绩公示多久啊上海网站营销seo电话
  • wordpress建站视屏数字营销软件
  • 网站需要租服务器吗引擎搜索大全
  • 郑州做网站msgg百度推广账号注册
  • 庆阳市门户网优化网站排名方法
  • gm源码之家武汉seo搜索引擎
  • 做worksheet的网站合肥百度竞价推广代理公司
  • 用html做的零食网站关键词seo公司
  • 网站的提交重置按钮怎么做系统优化的意义
  • 电子商务网站建设a卷搜索引擎的两个基本方法
  • 网站怎么做搜索栏网络舆情分析报告
  • 当建设部门网站网络营销教程
  • 成都网站制作售后html+css网页制作成品
  • 关键词与网站标题官网seo
  • 网站蜘蛛爬行统计站长之家域名
  • php网站用的是什么语言写的在百度上怎么发布信息
  • 87网站建设工作室建站服务
  • 南昌网站开发培训中心网站搭建一般要多少钱
  • 福鼎手机网站建设百度seo排名优化系统
  • 南宁网站怎么做seo百度指数的作用
  • 网站中文商标域名注册网站建设找哪家好
  • 钓鱼网站如何做福州百度快速优化排名
  • dw做框架网站世界杯积分榜排名
  • 婚纱照网站模板全国唯一一个没有疫情的城市