项目中日历管理学习使用

一些项目中会有日历或日期设置,最基本的会显示工作日,休息日,节假日等等,下面就是基于项目中的日历管理功能,要显示工作日,休息日,节假日

效果图

在这里插入图片描述

获取国家法定节假日工具类

public class HolidayUtils {private static Logger logger = LoggerFactory.getLogger(HolidayUtils.class);public static Map<String,Map<String,OtherData>> monthToHolidayDate = new ConcurrentHashMap<>(12);public static Map<String,OtherData> dateToOtherData = new ConcurrentHashMap<>(12);public static void main(String[] args) {System.out.println(getAllHoliday(2024));}/*** 获取周末和节假日** @param year* @return*/public static List<String> getAllHoliday(int year) {// 获取所有的周末Set<String> allWeekend = getAllWeekend(year);// http://timor.tech/api/holiday api文档地址Map apiHoliday = getApiHoliday(year);Integer code = (Integer) apiHoliday.get("code");if (code != 0) {return null;}Map<String, Map<String, Object>> holiday = (Map<String, Map<String, Object>>) apiHoliday.get("holiday");Set<String> strings = holiday.keySet();for (String str : strings) {Map<String, Object> stringObjectMap = holiday.get(str);Integer wage = (Integer) stringObjectMap.get("wage");String date = (String) stringObjectMap.get("date");//筛选掉补班if (wage.equals(1)) {allWeekend.remove(date);} else {allWeekend.add(date);}int monthByDate = CalendarUtils.getMonthByDate(CalendarUtils.parseDateStrToDate(date, "yyyy-MM-dd"));if (!monthToHolidayDate.containsKey(monthByDate)){monthToHolidayDate.put(monthByDate+"",new HashMap<>());}Map<String, OtherData> dateToOtherData = monthToHolidayDate.get(monthByDate);if (dateToOtherData == null) dateToOtherData = new HashMap<>();if (!dateToOtherData.containsKey(date)){OtherData otherData = new OtherData();otherData.putAll(stringObjectMap);dateToOtherData.put(date,otherData);dateToOtherData.put(date,otherData);}}List<String> result = new ArrayList<>(allWeekend);result = result.stream().sorted().collect(Collectors.toList());return result;}/*** 获取节假日不含周末** @param year* @return*/private static Map getApiHoliday(int year) {String url = "http://timor.tech/api/holiday/year/" + year;String rsa = HttpUtil.get(url);logger.info("rsa:{}",rsa);Map map = JsonConverter.jsonStrToObject(rsa, Map.class);return map;}/*** 获取周末  月从0开始** @param year* @return*/public static Set<String> getAllWeekend(int year) {Set<String> dateList = new HashSet<>();SimpleDateFormat simdf = new SimpleDateFormat("yyyy-MM-dd");Calendar calendar = new GregorianCalendar(year, 0, 1);Calendar endCalendar = new GregorianCalendar(year, 11, 31);while (true) {int weekday = calendar.get(Calendar.DAY_OF_WEEK);if (weekday == 1 || weekday == 7) {dateList.add(simdf.format(calendar.getTime()));}calendar.add(Calendar.DATE, 1);if (calendar.getTimeInMillis() >= endCalendar.getTimeInMillis()) {break;}}return dateList;}public static Map<String,OtherData> getHolidayByMonth(String month,Date date){if (monthToHolidayDate == null) return new HashMap<>();if (StringUtils.isNotBlank(month)){month = CalendarUtils.getMonthByDate(date) + "";Map<String, OtherData> dateToOtherData = monthToHolidayDate.get(month);if (dateToOtherData == null) dateToOtherData = new HashMap<>();return dateToOtherData;}return new HashMap<>();}public static OtherData getHolidayByDate(Date date){String month = CalendarUtils.getMonthByDate(date) + "";Map<String, OtherData> dateToOtherData = monthToHolidayDate.get(month);if (dateToOtherData == null || dateToOtherData.size() == 0) return null;String dateStr = CalendarUtils.toString(date, "yyyy-MM-dd");OtherData otherData = dateToOtherData.get(dateStr);if (otherData != null && otherData.obtainVal("wage",Integer.class) != null&& 1 == otherData.obtainVal("wage",Integer.class)){return null;}return otherData;}public static String isHoliday(Date date){String month = CalendarUtils.getMonthByDate(date) + "";Map<String, OtherData> dateToOtherData = monthToHolidayDate.get(month);if (dateToOtherData == null || dateToOtherData.size() == 0) return null;String dateStr = CalendarUtils.toString(date, "yyyy-MM-dd");OtherData otherData = dateToOtherData.get(dateStr);if (otherData == null) return null;if (otherData != null && otherData.obtainVal("wage",Integer.class) != null&& 1 == otherData.obtainVal("wage",Integer.class)){return DateRec.DATE_TYPE_WORK;}return DateRec.DATE_TYPE_HOLIDAY;}}

返回的JSON数据格式

{"code": 0,"holiday": {"01-01": {"holiday": true,"name": "元旦","wage": 3,"date": "2024-01-01","rest": 1},"02-04": {"holiday": false,"name": "春节前补班","wage": 1,"after": false,"target": "春节","date": "2024-02-04","rest": 9},"02-10": {"holiday": true,"name": "初一","wage": 3,"date": "2024-02-10","rest": 15},"02-11": {"holiday": true,"name": "初二","wage": 3,"date": "2024-02-11","rest": 1},"02-12": {"holiday": true,"name": "初三","wage": 3,"date": "2024-02-12"},"02-13": {"holiday": true,"name": "初四","wage": 2,"date": "2024-02-13"},"02-14": {"holiday": true,"name": "初五","wage": 2,"date": "2024-02-14"},"02-15": {"holiday": true,"name": "初六","wage": 2,"date": "2024-02-15"},"02-16": {"holiday": true,"name": "初七","wage": 2,"date": "2024-02-16"},"02-17": {"holiday": true,"name": "初八","wage": 2,"date": "2024-02-17"},"02-18": {"holiday": false,"name": "春节后补班","wage": 1,"after": true,"target": "春节","date": "2024-02-18"},"04-04": {"holiday": true,"name": "清明节","wage": 3,"date": "2024-04-04","rest": 46},"04-05": {"holiday": true,"name": "清明节","wage": 2,"date": "2024-04-05"},"04-06": {"holiday": true,"name": "清明节","wage": 2,"date": "2024-04-06"},"04-07": {"holiday": false,"name": "清明节后补班","wage": 1,"target": "清明节","after": true,"date": "2024-04-07"},"04-28": {"holiday": false,"name": "劳动节前补班","wage": 1,"target": "劳动节","after": false,"date": "2024-04-28"},"05-01": {"holiday": true,"name": "劳动节","wage": 3,"date": "2024-05-01"},"05-02": {"holiday": true,"name": "劳动节","wage": 2,"date": "2024-05-02","rest": 1},"05-03": {"holiday": true,"name": "劳动节","wage": 3,"date": "2024-05-03"},"05-04": {"holiday": true,"name": "劳动节","wage": 3,"date": "2024-05-04"},"05-05": {"holiday": true,"name": "劳动节","wage": 3,"date": "2024-05-05"},"05-11": {"holiday": false,"name": "劳动节后补班","after": true,"wage": 1,"target": "劳动节","date": "2024-05-11"},"06-08": {"holiday": true,"name": "端午节","wage": 2,"date": "2024-06-08"},"06-09": {"holiday": true,"name": "端午节","wage": 2,"date": "2024-06-09"},"06-10": {"holiday": true,"name": "端午节","wage": 3,"date": "2024-06-10"},"09-14": {"holiday": false,"name": "中秋节前补班","after": false,"wage": 1,"target": "中秋节","date": "2024-09-14","rest": 96},"09-15": {"holiday": true,"name": "中秋节","wage": 2,"date": "2024-09-15","rest": 97},"09-16": {"holiday": true,"name": "中秋节","wage": 2,"date": "2024-09-16"},"09-17": {"holiday": true,"name": "中秋节","wage": 3,"date": "2024-09-17"},"09-29": {"holiday": false,"name": "国庆节前补班","after": false,"wage": 1,"target": "国庆节","date": "2024-09-29"},"10-01": {"holiday": true,"name": "国庆节","wage": 3,"date": "2024-10-01"},"10-02": {"holiday": true,"name": "国庆节","wage": 3,"date": "2024-10-02","rest": 1},"10-03": {"holiday": true,"name": "国庆节","wage": 3,"date": "2024-10-03"},"10-04": {"holiday": true,"name": "国庆节","wage": 2,"date": "2024-10-04"},"10-05": {"holiday": true,"name": "国庆节","wage": 2,"date": "2024-10-05"},"10-06": {"holiday": true,"name": "国庆节","wage": 2,"date": "2024-10-06","rest": 1},"10-07": {"holiday": true,"name": "国庆节","wage": 2,"date": "2024-10-07","rest": 1},"10-12": {"holiday": false,"after": true,"wage": 1,"name": "国庆节后补班","target": "国庆节","date": "2024-10-12"}}
}

实体模型

@Entity
@Table(name = "t_daterec",indexes={@Index(name="idx_t_daterec1",columnList="dateType"),@Index(name="idx_t_daterec2",columnList="dateTime")}
)
public class DateRec extends ExBizEntity {public static final String DATE_TYPE_WORK = "work";public static final String DATE_TYPE_WEEKEND = "weekend";public static final String DATE_TYPE_HOLIDAY = "holiday";@Column(length=20,nullable=false)private String dateType;//日历类型private Date dateTime;//日期public String getDateType() {return dateType;}public Date getDateTime() {return dateTime;}public DateRec() {}public DateRec(String id,String dateType, Date dateRTime) {this.id = id;this.dateType = dateType;this.dateTime = dateTime;}
}
@Entity
@Table(name = "t_holiday",indexes={@Index(name="idx_t_holiday1",columnList="holidayDate")}
)
public class Holiday extends ExBizEntity{private Date holidayDate;public Holiday() {}public Holiday(Date holidayDate) {this.holidayDate = holidayDate;}public Date getHolidayDate() {return holidayDate;}
}

超类

@MappedSuperclass
public abstract class ExBizEntity extends ValueObjectEntity {@Type(type="com.xysd.common.utils.hibernateType.MyCustomJsonType")private OtherData exAttr = new OtherData();//额外属性mappublic OtherData getExAttr() {return exAttr;}protected ExBizEntity(){super();}protected ExBizEntity(Map<String, Object> exAttr) {super();this.getNotNullExAttrWithUpdate().putAll(exAttr);}//获取非空扩展属性private OtherData getNotNullExAttrWithUpdate() {if(this.exAttr == null) this.exAttr = new OtherData();return this.exAttr;}public void clearExAttr(){this.exAttr = null;}//更新扩展属性public void updateExAttr(Map<String, Object> exAttr){this.getNotNullExAttrWithUpdate().clear();if(exAttr==null) {this.exAttr = null;return;}this.addAttrs(exAttr);}//添加扩展属性public void addAttr(String key, Object value){if(StringUtils.isBlank(key)) return;if(value==null) {this.getNotNullExAttrWithUpdate().remove(key);}else {this.getNotNullExAttrWithUpdate().put(key, value);}}//添加扩展属性public void addAttrs(Map<String, Object> exAttr){if(exAttr==null) return;for (Map.Entry<String,Object> e : exAttr.entrySet()) {this.addAttr(e.getKey(), e.getValue());}}//获取指定类型的对象@Transientpublic <T> T getAttr(String key) {if(this.exAttr==null) return null;return this.exAttr.obtainVal(key);}//获取指定类型的对象@Transientpublic <T> T getAttr(String key, Class<T> valClass) {if(this.exAttr==null) return null;return this.exAttr.obtainVal(key, valClass);}//获取指定转换类型的对象@Transientpublic <T> T getAttr(String key, TypeReference<T> valTypeRef) {if(this.exAttr==null) return null;return this.exAttr.obtainVal(key, valTypeRef);}}
@MappedSuperclass
public abstract class ValueObjectEntity extends IEntity{public static String SYSCODE_CAD="cad";//系统编码-cad:cad接口protected Date createTime = new Date();//创建时间@Type(type = "org.hibernate.type.NumericBooleanType")protected boolean history=false;@Column(length=40)protected String createIp;//创建时的ipprotected int valid=1;//有效性protected Date lastUpdateDate = new Date();//最后更新时间@Column(length=10)protected String syscode=SYSCODE_HDXF; //数据系统编码public Date getCreateTime() {return createTime;}public boolean isHistory() {return history;}public String getCreateIp() {return createIp;}public int getValid() {return valid;}public Date getLastUpdateDate() {return lastUpdateDate;}public String getSyscode() {return syscode;}protected ValueObjectEntity() {super();}@Transientpublic boolean isValidEntity(){return this.getValid()==1;}public void updateValid(int valid){this.valid = valid;}}
@MappedSuperclass
public abstract class IEntity {@Id@Column(length=100)@GeneratedValue(generator="uuidkey")@GenericGenerator(name="uuidkey", strategy = "com.xysd.common.utils.BaseIDGenerator")protected String id;public String getId() {return this.id;}/*** 对比俩个实体是否是同一个*/public boolean compareObject(IEntity other) {return other != null && new EqualsBuilder().append(this.id, other.getId()).isEquals();}}
public class BaseIDGenerator implements IdentifierGenerator {private static AutoIncrementIdUtil autoIncrementIdUtil;public static void registAutoIncrementIdUtil(AutoIncrementIdUtil autoIncrementIdUtil){BaseIDGenerator.autoIncrementIdUtil = autoIncrementIdUtil;}@Overridepublic Serializable generate(SharedSessionContractImplementor arg0,Object o) throws HibernateException {if(o instanceof NeedAutoIncrementId){NeedAutoIncrementId entity = (NeedAutoIncrementId) o;String id = entity.obtainId();if(!StringUtils.isEmpty(id)){entity.initId(id);}else {id = autoIncrementIdUtil.getId(entity.getClass().getSimpleName(), entity.obtainParentId(),entity.obtainLength(), entity.obtainSeparator());entity.initId(id);}return id;}if(o instanceof IEntity){//允许自己指定IDIEntity be = (IEntity)o;if(StringUtils.isNotBlank(be.getId())){return be.getId();}}return Utils.getUUID("");}
}

接口

@ApiOperation(value="日历管理查看",httpMethod="GET")@ApiImplicitParams({@ApiImplicitParam(name="year",value="年份",required=true),@ApiImplicitParam(name="month",value="月份",required=true)})@RequestMapping(value = "/dates/list", method = RequestMethod.GET)public String getDates(@RequestParam int year, @RequestParam int month, HttpServletRequest hreq) {String weeks = myService.getDates(year,month);return weeks;}}

Service服务及封装数据

@Service
public class MyService {@Autowiredprivate DateRecRepositoryHibernate dateRecRepositoryHibernate;@PostConstructpublic void init(){//加载国家法定节假日HolidayUtils.getAllHoliday(CalendarUtils.getCurrentYear());Map<String, OtherData> dateToOtherData = HolidayUtils.dateToOtherData;List<Holiday> holidays = this.dateRecRepositoryHibernate.getHolidays();if (CollectionUtils.isNotEmpty(holidays)) {for (Holiday holiday : holidays) {HolidayUtils.dateToOtherData.put(CalendarUtils.toString(holiday.getHolidayDate(), "yyyy-MM-dd"), holiday.getExAttr());}} else {for (Map.Entry<String, OtherData> entry : dateToOtherData.entrySet()) {Holiday h = new Holiday(CalendarUtils.parseDateStrToDate(entry.getKey(), "yyyy-MM-dd"));h.addAttrs(entry.getValue());this.dateRecRepositoryHibernate.createOrUpdateHoliday(h);}}}public String getDates(int year, int month) {//要返回前端展示使用List<WeekDTO> weeks = new ArrayList<WeekDTO>();//获取year年month月的第一天Date monthBegin = CalendarUtils.getMonthBeginByYearAndMonth(year, month);//获取year年month月的最后一天Date monthEnd = CalendarUtils.getMonthEndByYearAndMonth(year, month);WeekValObj wo = CalendarUtils.getWeekValObjByDateOfYear(monthBegin);//获取year年month月的第一天是这一年中第几周int weekNumOfMonthBegin = wo.getWeek();//selectYear就是yearint selectedYear = wo.getYear();Map<String, DateDTO> allDates = new HashMap<String, DateDTO>();List<String> dates = new ArrayList<String>();int weekNum = 7;for (int k = 0; k < weekNum; k++) {//获取selectyear年总共有几周int maxWeekOfYear = CalendarUtils.getMaxWeekCountByYear(selectedYear);//获取selectedYear年第weekNumOfMonthBegin周的第一天日期Date weekBegin = CalendarUtils.getWeekBeginByYearAndWeek(selectedYear, weekNumOfMonthBegin);List<DateDTO> weekDates = new ArrayList<DateDTO>();if (weekBegin == null) {//如果没有获取到 则默认为year+1年的第一周的第一天日期weekBegin = CalendarUtils.getWeekBeginByYearAndWeek(year + 1, 1);}if (weekBegin != null && weekBegin.getTime() < monthEnd.getTime()) {for (int i = 0; i < 7; i++) {//开始取第weekNumOfMonthBegin周的第i天Date d = DateUtils.addDays(weekBegin, i);String type = null;if (StringUtils.isNotBlank(HolidayUtils.isHoliday(d))) {type = HolidayUtils.isHoliday(d);} else {type = DateRec.DATE_TYPE_WORK;if (i >= 5) {type = DateRec.DATE_TYPE_WEEKEND;}}//是否要展示boolean display = d.getTime() >= monthBegin.getTime() && d.getTime() <= monthEnd.getTime();String dateStr = CalendarUtils.toString(d, "yyyy-MM-dd");DateDTO dateDTO = new DateDTO(dateStr, type, display);weekDates.add(dateDTO);allDates.put(dateDTO.getDate(), dateDTO);}weeks.add(new WeekDTO(year, weekNumOfMonthBegin, weekDates));}if (weekNumOfMonthBegin >= maxWeekOfYear) {selectedYear++;weekNumOfMonthBegin = 1;} else {weekNumOfMonthBegin++;}}dates.addAll(allDates.keySet());Map<String, Object> params = new HashMap<>();params.put("dates", dates);List<DateRec> existedDateRecs = this.dateRecRepositoryHibernate.getDateRecBy(params);for (DateRec drec : existedDateRecs) {//已存在的DateDTO dto = allDates.remove(drec.getId());if (dto != null) {dto.setDateType(drec.getDateType());}}for (DateDTO dto : allDates.values()) {//需要创建的DateRec drec = new DateRec(dto.getDate(),dto.getDateType(), CalendarUtils.parseDateStrToDate(dto.getDate(), "yyyy-MM-dd"));this.dateRecRepositoryHibernate.createOrUpdateDateRec(drec);}return JsonConverter.toJsonStr(weeks);}}

数据基础层

@Repository
public class DateRecRepositoryHibernate extends JpaHibernateRepository {public void createOrUpdateDateRec(DateRec dateRec){this.getSession().saveOrUpdate(dateRec);}public List<DateRec> getDateRecBy(Map<String,Object> params){StringBuffer sql = new StringBuffer();sql.append(" select id from t_daterec where valid = 1 ");if (params.get("ids") != null){sql.append(" and id in (:ids) ");}if (params.get("dates") != null){sql.append(" and date in (:dates) ");}if (params.get("dateTypes") != null){sql.append(" and date_type in (:dateTypes) ");}List<String> ids = this.createSQLQueryByMapParams(sql.toString(), params).list();if (CollectionUtils.isEmpty(ids)) return new ArrayList<>();List<DateRec> recs = this.findByOrderedIds(DateRec.class, ids);if (recs == null) return new ArrayList<>();return recs;}public void createOrUpdateHoliday(Holiday holiday){this.getSession().saveOrUpdate(holiday);}public List<Holiday> getHolidays(){String sql = "select d from " + Holiday.class.getName() + " d where d.holidayDate >= : begin and d.holidayDate <= :end ";List<Holiday> list = this.createHQLQueryByMapParams(Holiday.class, sql, Utils.buildMap("begin", CalendarUtils.getCurrentYearBeginDate(), "end", CalendarUtils.getCurrentYearEndDate())).list();if (list == null) list = new ArrayList<>();return list;}
}

请求返回值

[{"year": 2024,"weekNum": 5,"dates": [{"date": "2024-01-29","dateType": "work","display": false},{"date": "2024-01-30","dateType": "work","display": false},{"date": "2024-01-31","dateType": "work","display": false},{"date": "2024-02-01","dateType": "work","display": true},{"date": "2024-02-02","dateType": "work","display": true},{"date": "2024-02-03","dateType": "weekend","display": true},{"date": "2024-02-04","dateType": "weekend","display": true}]},{"year": 2024,"weekNum": 6,"dates": [{"date": "2024-02-05","dateType": "work","display": true},{"date": "2024-02-06","dateType": "work","display": true},{"date": "2024-02-07","dateType": "work","display": true},{"date": "2024-02-08","dateType": "work","display": true},{"date": "2024-02-09","dateType": "work","display": true},{"date": "2024-02-10","dateType": "weekend","display": true},{"date": "2024-02-11","dateType": "weekend","display": true}]},{"year": 2024,"weekNum": 7,"dates": [{"date": "2024-02-12","dateType": "work","display": true},{"date": "2024-02-13","dateType": "work","display": true},{"date": "2024-02-14","dateType": "work","display": true},{"date": "2024-02-15","dateType": "work","display": true},{"date": "2024-02-16","dateType": "work","display": true},{"date": "2024-02-17","dateType": "weekend","display": true},{"date": "2024-02-18","dateType": "weekend","display": true}]},{"year": 2024,"weekNum": 8,"dates": [{"date": "2024-02-19","dateType": "work","display": true},{"date": "2024-02-20","dateType": "work","display": true},{"date": "2024-02-21","dateType": "work","display": true},{"date": "2024-02-22","dateType": "work","display": true},{"date": "2024-02-23","dateType": "work","display": true},{"date": "2024-02-24","dateType": "weekend","display": true},{"date": "2024-02-25","dateType": "weekend","display": true}]},{"year": 2024,"weekNum": 9,"dates": [{"date": "2024-02-26","dateType": "work","display": true},{"date": "2024-02-27","dateType": "work","display": true},{"date": "2024-02-28","dateType": "work","display": true},{"date": "2024-02-29","dateType": "work","display": true},{"date": "2024-03-01","dateType": "work","display": false},{"date": "2024-03-02","dateType": "weekend","display": false},{"date": "2024-03-03","dateType": "weekend","display": false}]}
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/433868.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言grpc服务开发——Protocol Buffer

文章目录 一、Protocol Buffer简介二、Protocol Buffer编译器安装三、proto3语言指南四、序列化与反序列化五、引入grpc-gateway1、插件安装2、定义proto文件3、生成go文件4、实现Service服务5、gRPC服务启动方法6、gateway服务启动方法7、main函数启动8、验证 相关参考链接&am…

msvcp140.dll丢失的解决方法

当你在尝试打开一个需要msvcp140.dll文件支持的程序或游戏时&#xff0c;如果系统提示该文件丢失&#xff0c;那么意味着在执行过程中缺少了这个关键的DLL文件。当系统无法找到或加载msvcp140.dll文件时&#xff0c;相应的程序将无法正常启动&#xff0c;这对于用户来说可能会非…

上位机图像处理和嵌入式模块部署(python opencv)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们谈到了qt&#xff0c;谈到了opencv&#xff0c;也谈到了嵌入式&#xff0c;但是没有说明python在这个过程当中应该扮演什么样的角色。open…

mac滚动截图

参考博客 https://www.zhihu.com/question/313673726/answer/2938671835 首先去AppStore搜索 iShot 这个也是要钱的&#xff0c;不过我输入appleID后&#xff0c;并没有扣我钱&#xff0c;不知道设么回事 然后打开iShot 点击观看视频&#xff0c;然后mac会自动打开一个新的…

JVM-字节码应用

一、字节码的应用远超你的想象 二、ASM介绍与读取字节码实战 用CoreAPI解析和TreeAPI都能做字节码解析&#xff0c;区别&#xff0c;TreeAPI必须读取完整字节码信息&#xff0c;才能做解析。 下面代码&#xff0c;使用CoreAPI做解析&#xff1a; package asm;public class MyM…

拦截器的简单使用

拦截器的简单使用 拦截器的使用创建拦截器preHandle 目标方法执行前执行postHandle 目标方法执行后执行afterCompletion 视图渲染后执行 拦截器使用场景返回值注册拦截器运用拦截器 拦截器的使用 创建拦截器 首先,我们需要创建一个拦截器器的类,并且需要继承自HandlerIntercep…

DEM高程地形瓦片数据Cesium使用教程

一、简介 从开始写文章到现在&#xff0c;陆续发布了全球90m、30m(包括哥白尼及ALOS)、12.5m全球级瓦片数据&#xff0c;以及中国12.5、日本10m、新西兰8m、等国家级瓦片数据&#xff0c;同时也发布了台湾20m、中国34省区12.5m等地区级瓦片数据。在数据发布的文章中对数据如何…

docker之部署青龙面板

青龙面板是一个用于管理和监控 Linux 服务器的工具&#xff0c;具有定时运行脚本任务的功能。在实际情况下也可以用于一些定期自动签到等任务脚本的运行。 本次记录下简单的安装与使用&#xff0c;请提前安装好docker&#xff0c;参考之前的文章。 一、安装部署 1、拉取镜像 # …

力扣每日一题 ---- 1039. 多边形三角剖分的最低得分

这题的难点在哪部分呢&#xff0c;其实是怎么思考。这道题如果之前没做过类似的话&#xff0c;还是很难看出一些性质的&#xff0c;这题原本的话是没有图片把用例显示的这么详细的。这题中有个很隐晦的点没有说出来 剖出来的三角形是否有交叉&#xff0c;这题中如果加一个三角…

Autodesk AutoCAD 2024:开启无限创意,塑造未来设计

随着科技的飞速发展&#xff0c;设计行业正在经历前所未有的变革。作为设计领域的核心软件&#xff0c;Autodesk AutoCAD 2024以其强大的功能和卓越的性能&#xff0c;引领着设计行业的创新潮流。 AutoCAD 2024不仅继承了前代版本的优点&#xff0c;更在功能和性能上进行了全面…

上门预约回收小程序开发,开启互联网回收模式

随着环保理念的提升&#xff0c;废弃物品不再采用丢弃的方式&#xff0c;更多的是进行回收&#xff0c;因此&#xff0c;我国回收行业迎来了发展蓝海。而废品回收行业在众多行业中也是一个创业蓝海选择&#xff0c;回收行业的市场体量庞大&#xff0c;有较大的发展前景。 如今…

插槽(64-67)

文章目录 插槽1.插槽 - 默认插槽(组件内可以定制一处结构)2.插槽 - 后备内容&#xff08;默认值&#xff09;3.插槽 - 具名插槽(组件内可以定制多处结构)4.作用域插槽(插槽的一个传参语法) 插槽 插槽分类:默认插槽和具名插槽 1.插槽 - 默认插槽(组件内可以定制一处结构) 作用…