扫码关注官方订阅号
1.创建公告时有生效的时间段:开始时间和过期时间;
2.当创建新的公告时,要保证同一时间点不能存在三个同时生效的公告
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
每次新建的时候验证,先查出与当前新建的有交叉的集合,然后验证集合中有没有两两交叉的,如果有,那么就会不能创建,这样就保证了不会在同一时间存在三个公告
直接写个 sql 就搞定了:
select count(1) from table where start <= 新公告end and end >= 新公告start
如果结果小于3,就创建。
插入时,遍历表,判断当前时间戳是否在两个时间戳之间,并记录符合该条件的数量,若>=3,不执行插入。否则,插入数据表。
用两个时间点,统计一下这个时间段里面有效的公告有几个!多余3个就不能创建了。
试着写了下,可以参考一下,
public class OtherTest { public static void main(String[] args) { boolean bn = new OtherTest().test(); System.out.println(bn); } public boolean test(){ //查询出在要添加的公告时间段内的公告时间段 TimeNode node1 =new TimeNode(1, 4); TimeNode node2 =new TimeNode(1, 4); TimeNode node3 =new TimeNode(9, 11); List<TimeNode> list= new ArrayList<TimeNode>(); list.add(node1); list.add(node2); list.add(node3); //是否有交集? boolean insert = true; for(int i=0;i<list.size();i++){ TimeNode nodeI = list.get(i); for(int j=(i+1);j<list.size();j++){ TimeNode nodeJ = list.get(j); //如果存在两个时间段有交集 那说明在交集的时间段内已经有2个公告了,不能在添加了 if(nodeI.end > nodeJ.start && nodeI.start < nodeJ.end){ insert = false; //false return break; } } if(!insert){ break; } } return insert; } class TimeNode{ int start; int end; public TimeNode(int pStart,int pEnd){ start = pStart; end = pEnd; } } }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
每次新建的时候验证,先查出与当前新建的有交叉的集合,然后验证集合中有没有两两交叉的,如果有,那么就会不能创建,这样就保证了不会在同一时间存在三个公告
直接写个 sql 就搞定了:
如果结果小于3,就创建。
插入时,遍历表,判断当前时间戳是否在两个时间戳之间,并记录符合该条件的数量,若>=3,不执行插入。否则,插入数据表。
用两个时间点,统计一下这个时间段里面有效的公告有几个!
多余3个就不能创建了。
试着写了下,可以参考一下,