diff --git a/springboot-backend/src/main/java/com/admin/service/impl/NodeServiceImpl.java b/springboot-backend/src/main/java/com/admin/service/impl/NodeServiceImpl.java index b711317..e30e472 100644 --- a/springboot-backend/src/main/java/com/admin/service/impl/NodeServiceImpl.java +++ b/springboot-backend/src/main/java/com/admin/service/impl/NodeServiceImpl.java @@ -15,6 +15,7 @@ import com.admin.service.*; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; @@ -142,10 +143,26 @@ public class NodeServiceImpl extends ServiceImpl implements No - Node updateNode = buildUpdateNode(nodeUpdateDto); - this.updateById(updateNode); - return R.ok(); - } + Node updateNode = buildUpdateNode(nodeUpdateDto); + // Use LambdaUpdateWrapper to explicitly set nullable fields (serverIpV4/V6) + // because updateById() skips null fields by default + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(Node::getId, updateNode.getId()) + .set(Node::getName, updateNode.getName()) + .set(Node::getServerIp, updateNode.getServerIp()) + .set(Node::getServerIpV4, updateNode.getServerIpV4()) + .set(Node::getServerIpV6, updateNode.getServerIpV6()) + .set(Node::getPort, updateNode.getPort()) + .set(Node::getHttp, updateNode.getHttp()) + .set(Node::getTls, updateNode.getTls()) + .set(Node::getSocks, updateNode.getSocks()) + .set(Node::getInterfaceName, updateNode.getInterfaceName()) + .set(Node::getTcpListenAddr, updateNode.getTcpListenAddr()) + .set(Node::getUdpListenAddr, updateNode.getUdpListenAddr()) + .set(Node::getUpdatedTime, updateNode.getUpdatedTime()); + this.update(wrapper); + return R.ok(); + } @Override public R deleteNode(Long id) {