前端传递日期范围(开始时间和结束时间),后端解析及查询

前端技术:Vue3 + TypeScript + Element Plus

后端技术:Java + Spring Boot + MyBatis

应用效果:

原来方案

1、前端日期控件使用 el-date-picker,日期显示格式和日期值返回格式都为:YYYY-MM-DD

          <el-form :model="queryObj" :inline="true"><el-form-item label="流转时间:"><el-date-pickerv-model="queryObj.transactionTime"type="daterange"start-placeholder="开始时间"range-separator="至"end-placeholder="结束时间"format="YYYY-MM-DD"value-format="YYYY-MM-DD"unlink-panelsstyle="width: 240px"></el-date-picker></el-form-item></el-form>

2、前端查询对象中,流转时间 transactionTime,数据定义为 string[]

// 交易查询对象
export interface ITransactionsQueryObj {// 分仓id,1:试剂耗材;2:标准物质warehouseId: number | null;// 交易类型,1:入库;2:出库transactionType: number | null;// 流转时间transactionTime: string[];// 物资名称materialName: string;
}

3、后端查询对象中, 流转时间开始和流转时间结束,数据定义为 LocalDateTime

package com.weiyu.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.time.LocalDateTime;
import java.util.List;/*** 分仓交易(入库/出库)记录查询 DTO*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BranchWarehouseTransactionsQueryDTO {// 分仓id,1:试剂耗材;2:标准物质private Integer warehouseId;// 交易类型,1:入库;2:出库private Integer transactionType;// 流转时间private List<String> transactionTime;// 物资名称private String materialName;// 流转时间开始private LocalDateTime transactionTimeBegin;// 流转时间结束private LocalDateTime transactionTimeEnd;
}

 4、后端接收前端传递过来的流转时间 transactionTime(数据格式为:[2025-06-01, 2025-06-10]),使用 DateTimeFormatter 解析为 LocalDate,再通过 atStartOfDay() 和 atTime(LocalTime.MAX) 转换为 LocalDateTime

BranchWarehouseServiceImpl.java

    // 查询试剂交易(入库/出库)记录@Overridepublic List<BranchWarehouseTransactions> queryForReagent(BranchWarehouseTransactionsQueryDTO queryDTO) {if ((queryDTO.getTransactionTime() == null || queryDTO.getTransactionTime().isEmpty()) &&queryDTO.getTransactionType() == null &&(queryDTO.getMaterialName() == null || queryDTO.getMaterialName().isEmpty())) {throw new RuntimeException("请输入查询条件!");}// 处理字符日期数组,transactionTime=[2025-06-01, 2025-06-10],需处理为 LocalDateTime 格式的开始时间和结束时间if (queryDTO.getTransactionTime() != null && queryDTO.getTransactionTime().size() == 2) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");queryDTO.setTransactionTimeBegin(LocalDate.parse(queryDTO.getTransactionTime().get(0), formatter).atStartOfDay());queryDTO.setTransactionTimeEnd(LocalDate.parse(queryDTO.getTransactionTime().get(1), formatter).atTime(LocalTime.MAX));}return branchWarehouseMapper.selectForReagent(queryDTO, PublicUtils.getUserName());}

4、查询

BranchWarehouseMapper.java

    // 查询试剂交易(入库/出库)记录List<BranchWarehouseTransactions> selectForReagent(BranchWarehouseTransactionsQueryDTO queryDTO, String userName);

BranchWarehouseMapper.xml 

    <!-- 查询试剂交易(入库/出库)记录 --><select id="selectForReagent" resultType="com.weiyu.pojo.BranchWarehouseTransactionsQueryVO">select<include refid="selectForReagentBranchWarehouseTransactionsFields"/>from BranchWarehouseTransactions t1inner join Reagent t2on t2.rea_ID = t1.material_id<where><include refid="warehouse_is_reagent"/><if test="queryDTO.transactionTimeBegin != null">and t1.transaction_time >= #{queryDTO.transactionTimeBegin}</if><if test="queryDTO.transactionTimeEnd != null">and t1.transaction_time &lt;= #{queryDTO.transactionTimeEnd}</if><if test="queryDTO.transactionType != null">and t1.transaction_type = #{queryDTO.transactionType}</if><if test="queryDTO.materialName != null and queryDTO.materialName != ''">and t2.rea_Name like '%' + #{queryDTO.materialName} + '%'</if>and exists (select 1from Employee t3where t3.emp_ID = #{userName}and t3.emp_DeptID = t2.rea_DeptID)</where>order by t1.id asc</select>

调整方案1

调整内容:

1、前端日期控件使用 el-date-picker,日期显示格式为:YYYY-MM-DD,日期值返回格式为:YYYY-MM-DD HH:mm:ss,增加:default-time="[new Date(0, 0, 0, 0, 0, 0), new Date(0, 0, 0, 23, 59, 59)]"

          <el-form :model="queryObj" :inline="true"><el-form-item label="流转时间:"><el-date-pickerv-model="queryObj.transactionTime"type="daterange"start-placeholder="开始时间"range-separator="至"end-placeholder="结束时间"format="YYYY-MM-DD"value-format="YYYY-MM-DD HH:mm:ss":default-time="[new Date(0, 0, 0, 0, 0, 0), new Date(0, 0, 0, 23, 59, 59)]"unlink-panelsstyle="width: 240px"></el-date-picker></el-form-item></el-form>

 4、后端接收前端传递过来的流转时间 transactionTime(数据格式为:[2025-06-01 00:00:00, 2025-06-10 23:59:59]),使用 DateTimeFormatter 直接解析为LocalDateTime

BranchWarehouseServiceImpl.java

    // 查询试剂交易(入库/出库)记录@Overridepublic List<BranchWarehouseTransactions> queryForReagent(BranchWarehouseTransactionsQueryDTO queryDTO) {if ((queryDTO.getTransactionTime() == null || queryDTO.getTransactionTime().isEmpty()) &&queryDTO.getTransactionType() == null &&(queryDTO.getMaterialName() == null || queryDTO.getMaterialName().isEmpty())) {throw new RuntimeException("请输入查询条件!");}// 处理字符日期数组,transactionTime=[2025-06-01 00:00:00, 2025-06-10 23:59:59],需处理为 LocalDateTime 格式的开始时间和结束时间if (queryDTO.getTransactionTime() != null && queryDTO.getTransactionTime().size() == 2) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");queryDTO.setTransactionTimeBegin(LocalDateTime.parse(queryDTO.getTransactionTime().get(0), formatter));queryDTO.setTransactionTimeEnd(LocalDateTime.parse(queryDTO.getTransactionTime().get(1), formatter));}return branchWarehouseMapper.selectForReagent(queryDTO, PublicUtils.getUserName());}

调整方案2 

 调整内容:

1、前端日期控件使用 el-date-picker,日期显示格式为:YYYY-MM-DD,日期值返回格式为:x,增加:default-time="[new Date(0, 0, 0, 0, 0, 0), new Date(0, 0, 0, 23, 59, 59)]"

          <el-form :model="queryObj" :inline="true"><el-form-item label="流转时间:"><el-date-pickerv-model="queryObj.transactionTime"type="daterange"start-placeholder="开始时间"range-separator="至"end-placeholder="结束时间"format="YYYY-MM-DD"value-format="x":default-time="[new Date(0, 0, 0, 0, 0, 0), new Date(0, 0, 0, 23, 59, 59)]"unlink-panelsstyle="width: 240px"></el-date-picker></el-form-item></el-form>

 4、后端接收前端传递过来的流转时间 transactionTime(数据格式为:[1748707200000, 1749571199000]),先将时间戳 转换为 Instant (UTC时间),再转换为LocalDateTime

BranchWarehouseServiceImpl.java

    // 查询试剂交易(入库/出库)记录@Overridepublic List<BranchWarehouseTransactions> queryForReagent(BranchWarehouseTransactionsQueryDTO queryDTO) {if ((queryDTO.getTransactionTime() == null || queryDTO.getTransactionTime().isEmpty()) &&queryDTO.getTransactionType() == null &&(queryDTO.getMaterialName() == null || queryDTO.getMaterialName().isEmpty())) {throw new RuntimeException("请输入查询条件!");}// 处理字符日期数组,transactionTime=[1748707200000, 1749571199000],需处理为 LocalDateTime 格式的开始时间和结束时间if (queryDTO.getTransactionTime() != null && queryDTO.getTransactionTime().size() == 2) {// 先将时间戳 转换为 Instant (UTC时间)Instant instant1 = Instant.ofEpochMilli(Long.parseLong(queryDTO.getTransactionTime().get(0)));Instant instant2 = Instant.ofEpochMilli(Long.parseLong(queryDTO.getTransactionTime().get(1)));queryDTO.setTransactionTimeBegin(LocalDateTime.ofInstant(instant1, ZoneId.systemDefault()));queryDTO.setTransactionTimeEnd(LocalDateTime.ofInstant(instant2, ZoneId.systemDefault()));}return branchWarehouseMapper.selectForReagent(queryDTO, PublicUtils.getUserName());}

最终方案

特点:前端随便传,后端都兼容

已测试的前端传递方式

value-format="YYYY-MM-DD",前端传递日期数据样式:[2025-06-01, 2025-06-10]

                format="YYYY-MM-DD"value-format="YYYY-MM-DD"

value-format="YYYY-MM-DD",前端传递日期数据样式:[2025-06-01, 2025-06-10] 

                format="YYYY-MM-DD"value-format="YYYY-MM-DD":default-time="[new Date(0, 0, 0, 0, 0, 0), new Date(0, 0, 0, 23, 59, 59)]"

value-format="YYYY-MM-DD HH:mm:ss",前端传递时间数据样式:[2025-06-01 00:00:00, 2025-06-10 00:00:00]

                format="YYYY-MM-DD"value-format="YYYY-MM-DD HH:mm:ss"

value-format="YYYY-MM-DD HH:mm:ss",前端传递时间数据样式:[2025-06-01 00:00:00, 2025-06-10 23:59:59] 

                format="YYYY-MM-DD"value-format="YYYY-MM-DD HH:mm:ss":default-time="[new Date(0, 0, 0, 0, 0, 0), new Date(0, 0, 0, 23, 59, 59)]"

value-format="x" ,前端传递时间戳数据样式:[1748707200000, 1749484800000] 

                format="YYYY-MM-DD"value-format="x"

value-format="x" ,前端传递时间戳数据样式:[1748707200000, 1749571199000] 

                format="YYYY-MM-DD"value-format="x":default-time="[new Date(0, 0, 0, 0, 0, 0), new Date(0, 0, 0, 23, 59, 59)]"

后端:BranchWarehouseServiceImpl.java

    // 查询试剂交易(入库/出库)记录@Overridepublic List<BranchWarehouseTransactions> queryForReagent(BranchWarehouseTransactionsQueryDTO queryDTO) {if ((queryDTO.getTransactionTime() == null || queryDTO.getTransactionTime().isEmpty()) &&queryDTO.getTransactionType() == null &&(queryDTO.getMaterialName() == null || queryDTO.getMaterialName().isEmpty())) {throw new RuntimeException("请输入查询条件!");}if (queryDTO.getTransactionTime() != null && queryDTO.getTransactionTime().size() == 2) {String dateStyle = getDateStyle(queryDTO);switch (dateStyle) {// 处理字符日期数组,transactionTime=[2025-06-01, 2025-06-10],需处理为 LocalDateTime 格式的开始时间和结束时间case "日期" -> {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");queryDTO.setTransactionTimeBegin(LocalDate.parse(queryDTO.getTransactionTime().get(0), formatter).atStartOfDay());queryDTO.setTransactionTimeEnd(LocalDate.parse(queryDTO.getTransactionTime().get(1), formatter).atTime(LocalTime.MAX));}// 处理字符日期数组,transactionTime=[2025-06-01 00:00:00, 2025-06-10 00:00:00],需处理为 LocalDateTime 格式的开始时间和结束时间case "日期零时" -> {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");queryDTO.setTransactionTimeBegin(LocalDate.parse(queryDTO.getTransactionTime().get(0).substring(0,10), formatter).atStartOfDay());queryDTO.setTransactionTimeEnd(LocalDate.parse(queryDTO.getTransactionTime().get(1).substring(0,10), formatter).atTime(LocalTime.MAX));}// 处理字符日期数组,transactionTime=[2025-06-01 00:00:00, 2025-06-10 23:59:59],需处理为 LocalDateTime 格式的开始时间和结束时间case "日期时间" -> {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");queryDTO.setTransactionTimeBegin(LocalDateTime.parse(queryDTO.getTransactionTime().get(0), formatter));queryDTO.setTransactionTimeEnd(LocalDateTime.parse(queryDTO.getTransactionTime().get(1), formatter));}// 处理字符日期数组,transactionTime=[1748707200000, 1749484800000] 或 [1748707200000, 1749571199000],需处理为 LocalDateTime 格式的开始时间和结束时间case "时间戳" -> {// 先将时间戳 转换为 Instant (UTC时间)Instant instant1 = Instant.ofEpochMilli(Long.parseLong(queryDTO.getTransactionTime().get(0)));Instant instant2 = Instant.ofEpochMilli(Long.parseLong(queryDTO.getTransactionTime().get(1)));// 因为时间戳有可能是没有时间部分内容的,所以这里统一先转为 LocalDate,再通过 atStartOfDay() 和 atTime(LocalTime.MAX) 转为 LocalDateTimequeryDTO.setTransactionTimeBegin(LocalDate.ofInstant(instant1, ZoneId.systemDefault()).atStartOfDay());queryDTO.setTransactionTimeEnd(LocalDate.ofInstant(instant2, ZoneId.systemDefault()).atTime(LocalTime.MAX));}default -> {List<LocalDateTime> dateTimeList = DateUtils.parseDateTimeRange(queryDTO.getTransactionTime());queryDTO.setTransactionTimeBegin(dateTimeList.get(0));queryDTO.setTransactionTimeEnd(dateTimeList.get(1));}}}return branchWarehouseMapper.selectForReagent(queryDTO, PublicUtils.getUserName());}// 获取日期格式private static String getDateStyle(BranchWarehouseTransactionsQueryDTO queryDTO) {String dateStr = queryDTO.getTransactionTime().get(1);int len = dateStr.length();return switch (len) {// dateStr=[2025-06-01, 2025-06-10]case 10 -> "日期";// dateStr=[2025-06-01 00:00:00, 2025-06-10 00:00:00] 或 [2025-06-01 00:00:00, 2025-06-10 23:59:59]case 19 -> {// dateStr=[2025-06-01 00:00:00, 2025-06-10 00:00:00]if (dateStr.endsWith("00:00:00")) {yield "日期零时";}// dateStr=[2025-06-01 00:00:00, 2025-06-10 23:59:59]else {yield "日期时间";}}// dateStr=[1748707200000, 1749484800000] 或 [1748707200000, 1749571199000]case 13 -> "时间戳";default -> throw new IllegalStateException("Unexpected value: " + dateStr);};}

后端优化:封装日期解析逻辑为日期工具类  DateUtils.java

package com.weiyu.utils;import com.weiyu.utils.enums.DateEnumDirection;import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.format.ResolverStyle;
import java.util.ArrayList;
import java.util.List;public class DateUtils {// 标准模式// private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd")// 启用严格模式,使用 ResolverStyle.STRICT 严格模式,拒绝无效日期(如 2023-02-29),自动处理闰年、月份天数等复杂逻辑// 启用严格模式,ofPattern必设置为"uuuu-MM-dd").withResolverStyle(ResolverStyle.STRICT);private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss").withResolverStyle(ResolverStyle.STRICT);/*** 有效检查* @param dateStr 字符串* @return 提示信息*/public static String isValidDate(String dateStr) {// 1. 空值检查if (dateStr == null) return "日期字符串不能为null";// 2. 空白检查if (dateStr.isEmpty()) {return "日期字符串不能为空";}return "";}/*** 转换为 LocalDate 格式的日期* @param dateStr 字符串* @return LocalDate 格式的日期*/public static LocalDate parseDate(String dateStr) {// 检查日期字符串格式String msg = isValidDate(dateStr);if (!msg.isEmpty()) {throw new RuntimeException(msg);}try {// 解析日期return LocalDate.parse(dateStr, DATE_FORMATTER);} catch (DateTimeParseException e) {// 格式错误处理throw new IllegalArgumentException("日期格式错误,应为 yyyy-MM-dd,并且为有效日期", e);}}/*** 将字符数组转换为日期数组,如:["2025-06-01", "2026-06-10"] 转换为 [beginDate, endDate]* @param dateStrList 字符数组* @return 日期数组,只限开始日期和结束日期,[beginDate, endDate]*/public static List<LocalDate> parseDateRange(List<String> dateStrList) {List<LocalDate> dateList = new ArrayList<>();if (dateStrList == null || dateStrList.size() != 2) {dateList.add(LocalDate.now());dateList.add(LocalDate.now());} else {try {dateList.add(parseDate(dateStrList.get(0)));dateList.add(parseDate(dateStrList.get(1)));} catch (DateTimeParseException e) {dateList.add(LocalDate.now());dateList.add(LocalDate.now());}}// 检查日期逻辑关系,开始时间大于结束时间if (dateList.get(0).isAfter(dateList.get(1))) {LocalDate maxDate = dateList.get(0);dateList.set(0, dateList.get(1));dateList.set(1,maxDate);}return dateList;}/*** 解析日期字符串范围为日期范围* @param dateStrRange 日期字符串范围,如:[2025-06-01, 2025-06-10]、[2025-06-01 00:00:00, 2025-06-10 23:59:59]、[1748707200000, 1749571199000]* @return List<LocalDateTime> 日期范围,如:[beginDateTime, endDateTime]*/public static List<LocalDateTime> parseDateTimeRange(List<String> dateStrRange) {List<LocalDateTime> dateTimeRange = new ArrayList<>();if (dateStrRange != null && dateStrRange.size() == 2) {DateEnumDirection dateDirection = getDateDirection(dateStrRange.get(1));switch (dateDirection) {// 处理字符日期数组,transactionTime=[2025-06-01, 2025-06-10],需处理为 LocalDateTime 格式的开始时间和结束时间case DATE -> {dateTimeRange.add(LocalDate.parse(dateStrRange.get(0), DATE_FORMATTER).atStartOfDay());dateTimeRange.add(LocalDate.parse(dateStrRange.get(1), DATE_FORMATTER).atTime(LocalTime.MAX));}// 处理字符日期数组,transactionTime=[2025-06-01 00:00:00, 2025-06-10 00:00:00],需处理为 LocalDateTime 格式的开始时间和结束时间case DATE_TIME -> {dateTimeRange.add(LocalDate.parse(dateStrRange.get(0).substring(0,10), DATE_FORMATTER).atStartOfDay());dateTimeRange.add(LocalDate.parse(dateStrRange.get(1).substring(0,10), DATE_FORMATTER).atTime(LocalTime.MAX));}// 处理字符日期数组,transactionTime=[2025-06-01 00:00:00, 2025-06-10 23:59:59],需处理为 LocalDateTime 格式的开始时间和结束时间case DATE_ZERO_TIME -> {dateTimeRange.add(LocalDateTime.parse(dateStrRange.get(0), DATE_TIME_FORMATTER));dateTimeRange.add(LocalDateTime.parse(dateStrRange.get(1), DATE_TIME_FORMATTER));}// 处理字符日期数组,transactionTime=[1748707200000, 1749484800000] 或 [1748707200000, 1749571199000],需处理为 LocalDateTime 格式的开始时间和结束时间case TIME_STAMP -> {// 先将时间戳 转换为 Instant (UTC时间)Instant instant1 = Instant.ofEpochMilli(Long.parseLong(dateStrRange.get(0)));Instant instant2 = Instant.ofEpochMilli(Long.parseLong(dateStrRange.get(1)));// 因为时间戳有可能是没有时间部分内容的,所以这里统一先转为 LocalDate,再通过 atStartOfDay() 和 atTime(LocalTime.MAX) 转为 LocalDateTimedateTimeRange.add(LocalDate.ofInstant(instant1, ZoneId.systemDefault()).atStartOfDay());dateTimeRange.add(LocalDate.ofInstant(instant2, ZoneId.systemDefault()).atTime(LocalTime.MAX));}default -> {List<LocalDate> dateList = parseDateRange(dateStrRange);dateTimeRange.add(dateList.get(0).atStartOfDay());dateTimeRange.add(dateList.get(1).atTime(LocalTime.MAX));}}}return dateTimeRange;}/*** 日期时间格式方向枚举* @param dateStr 日期字符串* @return 日期时间格式方向枚举 DateEnumDirection */public static DateEnumDirection getDateDirection(String dateStr) {int dateStrLen = dateStr.length();return switch (dateStrLen) {// dateStr=[2025-06-01, 2025-06-10]case 10 -> DateEnumDirection.DATE;// dateStr=[2025-06-01 00:00:00, 2025-06-10 00:00:00] 或 [2025-06-01 00:00:00, 2025-06-10 23:59:59]case 19 -> {// dateStr=[2025-06-01 00:00:00, 2025-06-10 00:00:00]if (dateStr.endsWith("00:00:00")) {yield DateEnumDirection.DATE_ZERO_TIME;}// dateStr=[2025-06-01 00:00:00, 2025-06-10 23:59:59]else {yield DateEnumDirection.DATE_TIME;}}// dateStr=[1748707200000, 1749484800000] 或 [1748707200000, 1749571199000]case 13 -> DateEnumDirection.TIME_STAMP;default -> DateEnumDirection.OTHER;};}
}
    // 查询试剂交易(入库/出库)记录@Overridepublic List<BranchWarehouseTransactions> queryForReagent(BranchWarehouseTransactionsQueryDTO queryDTO) {if ((queryDTO.getTransactionTime() == null || queryDTO.getTransactionTime().isEmpty()) &&queryDTO.getTransactionType() == null &&(queryDTO.getMaterialName() == null || queryDTO.getMaterialName().isEmpty())) {throw new RuntimeException("请输入查询条件!");}// 日期字符串数组,transactionTime=[2025-06-01, 2025-06-10] 或 [2025-06-01 00:00:00, 2025-06-10 23:59:59] 或 [1748707200000, 1749571199000]// 使用日期工具 DateUtils.parseDateTimeRange 转换为 LocalDateTime 格式的开始时间和结束时间queryDTO.setTransactionTimeBegin(DateUtils.parseDateTimeRange(queryDTO.getTransactionTime()).get(0));queryDTO.setTransactionTimeEnd(DateUtils.parseDateTimeRange(queryDTO.getTransactionTime()).get(1));return branchWarehouseMapper.selectForReagent(queryDTO, PublicUtils.getUserName());}

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

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

相关文章

零基础设计模式——行为型模式 - 命令模式

第四部分&#xff1a;行为型模式 - 命令模式 (Command Pattern) 接下来&#xff0c;我们学习行为型模式中的命令模式。这个模式能将“请求”封装成一个对象&#xff0c;从而让你能够参数化客户端对象&#xff0c;将请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 …

禁止 Windows 更新后自动重启

Windows 默认会在安装重要更新后自动重启&#xff0c;但你可以调整设置来避免这种情况&#xff1a; ​​方法 1&#xff1a;通过组策略&#xff08;适用于 Windows 专业版/企业版&#xff09;​​ 按 Win R&#xff0c;输入 gpedit.msc 打开 ​​本地组策略编辑器​​。导航…

GoldenDB简述

GoldenDB是国产的分布式数据库。它彻底解决了事务一致性&#xff0c;数据实时一致性的问题。采用的是Shared Nothing&#xff08;分片式存储&#xff09;的分布式架构。就是不共享数据&#xff0c;各自节点持有各自的数据。对比不共享的&#xff0c;还有其他两种分布式架构&…

训练过程中的 Loss ?

文章目录 在我们训练的过程中&#xff0c;设置好这个epochs也就是训练的轮次&#xff0c;然后计算这个损失函数&#xff0c;我们可以知道这个具体的训练的情况&#xff0c;那么在训练的过程中&#xff0c;这个损失函数的变化有哪些情况&#xff1f;对应的一个解释情况是怎么样的…

S2B2B农产品供应链交易多平台开发有哪些发展前景?如何维护?

一、S2B2B农产品供应链交易多平台开发的未来发展前景 本文将由小编为您介绍关于S2B2B农产品供应链交易多平台开发的内容&#xff0c;希望能够帮助大家。在数字化时代&#xff0c;农产品供应链的数字化转型成为了一种必然趋势。S2B2B(Supplier to Business to Business)模式通过…

关于有害的过度使用 std::move

翻译&#xff1a;2023 11 月 24 日On harmful overuse of std::move cppreference std::move 论 std::move 的有害过度使用 - The Old New Thing C 的 std::move 函数将其参数转换为右值引用&#xff0c;这使得其内容可以被另一个操作“消费”&#xff08;移动&#xff09;。…

Ubuntu24.04 onnx 模型转 rknn

前面的环境配置有点懒得写&#xff0c;教程也很多&#xff0c;可以自己找 rknn-toolkit2 gitee 地址&#xff1a;pingli/rknn-toolkit2 试了很多开源的代码&#xff0c;都没办法跑通&#xff0c; 最后自己改了一版 微调后的 qwen2 模型适用 from rknn.api import RKNN impor…

Electron通信流程

前言 今天讲Electron框架的通信流程&#xff0c;首先我们需要知道为什么需要通信。这得益于Electron的多进程模型&#xff0c;它主要模仿chrome的多进程模型如下图&#xff1a; 作为应用开发者&#xff0c;我们将控制两种类型的进程&#xff1a;主进程和渲染器进程 。 …

uni-app项目实战笔记1--创建项目和实现首页轮播图功能

ps:本笔记来自B站咸虾米壁纸项目 一.创建项目&#xff0c;完成项目初始化搭建 1.在HBuilder X创建wallper项目&#xff0c;使用默认模块&#xff0c;选择vue&#xff1b; 2.在项目根目录下创建common目录&#xff0c;用于存放静态资源&#xff0c;创建项目时自动生成static目…

机械制造系统中 PROFINET 与 PROFIBUS-DP 的融合应用及捷米科技解决方案

在机械制造领域&#xff0c;工业通信网络的兼容性与灵活性直接影响产线的自动化水平与生产效率。当前&#xff0c;多数机械制造系统采用PROFINET 控制器构建核心网络架构&#xff0c;并通过微波无线连接实现设备互联。随着工业网络的发展&#xff0c;系统中常需同时集成PROFINE…

MCP 协议系列序言篇:开启 AI 应用融合新时代的钥匙

文章目录 序言&#xff1a;AI 应用层进入 MCP 时代为什么 MCP 开启 AI 应用融合新时代的钥匙为什么是 MCP&#xff1f;它与 Function Calling、Agent 有什么区别&#xff1f;Function CallingAI AgentMCP&#xff08;Model Context Protocol&#xff09; MCP 如何工作MCP Serve…

【threejs】每天一个小案例讲解:光照

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 常见光照类型及其特点如下&#xff1a; 1. 环境光&#xff08;Ambi…

大模型在输尿管下段积水预测及临床应用的研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 研究范围与限制 1.4 文献综述 1.5 研究方法和框架 二、相关理论与概念 2.1 大模型技术原理 2.2 输尿管下段积水病理机制 2.3 大模型在医学预测领域的应用 三、大模型预测输尿管下段积水的方法 3.1 数据收集 3.…

gitlab相关操作

2025.06.11今天我学习了如何在终端使用git相关操作&#xff1a; 一、需要修改新的仓库git地址的时候&#xff1a; &#xff08;1&#xff09;检查当前远程仓库 git remote -v 输出示例&#xff1a; origin https://github.com/old-repo.git (fetch) origin https://github.c…

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…

通过共享内存在多程序之间实现数据通信

注&#xff1a;以下内容为与 GPT-4O 共同创作完成 以共享内存的方式实现多程序之间的数据通信&#xff0c;尤其适合在一台机器上的多程序之间进行高频数据交换。 以下示例展示了 sender.py 向 receiver.py 发送数据并接收经 receiver.py 处理后的数据&#xff0c;以及如何通过…

[论文阅读] 人工智能+软件工程 | 理解GitGoodBench:评估AI代理在Git中表现的新基准

理解GitGoodBench&#xff1a;评估AI代理在Git中表现的新基准 论文信息 GitGoodBench: A Novel Benchmark For Evaluating Agentic Performance On Git Tobias Lindenbauer, Egor Bogomolov, Yaroslav Zharov Cite as: arXiv:2505.22583 [cs.SE] 研究背景&#xff1a;当AI走进…

开源 java android app 开发(十二)封库.aar

文章的目的为了记录使用java 进行android app 开发学习的经历。本职为嵌入式软件开发&#xff0c;公司安排开发app&#xff0c;临时学习&#xff0c;完成app的开发。开发流程和要点有些记忆模糊&#xff0c;赶紧记录&#xff0c;防止忘记。 相关链接&#xff1a; 开源 java an…

ubuntu + nginx 1.26 + php7.4 + mysql8.0 调优

服务器配置 8核 16G 查看内存 free -h nginx配置 worker_processes auto; # 自动检测CPU核心数 worker_rlimit_nofile 65535; # 提高文件描述符限制 ​ events {worker_connections 8192; # 每个worker的最大连接数multi_accept on; # 一次性接受…

[未验证]abaqus2022 更改内置python

如何在 Abaqus 2022 中更改内置 Python 在 Abaqus 中&#xff0c;Python 是常用的脚本语言&#xff0c;它使得用户能够自动化模型的创建、分析和后处理。可能有时候你需要更改默认的 Python 版本&#xff0c;比如使用特定库或者功能。本文将为您详细说明如何在 Abaqus 2022 中更…