src/main/java/com/boying/controller/BarrierController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/controller/ParkController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/entity/EditParkNumLog.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/mapper/EditParkNumLogMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/service/EditParkNumLogService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/service/impl/EditParkNumLogServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/util/IpUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/boying/controller/BarrierController.java
@@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.boying.common.R; import com.boying.entity.Barrier; @@ -24,7 +25,8 @@ import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.List; import java.util.*; import java.util.stream.Collectors; @RestController @RequestMapping("ffzf/barrier") @@ -199,4 +201,33 @@ } } } @PostMapping("getDisConnect") @Operation(summary = "设备掉线通知" , description = "设备掉线通知" ) public Object getDisConnect() { List<Map<String,Object>> resultlist = new ArrayList<>(); String barrierCodeAll = redisTemplate.opsForValue().get("barrierCode_all"); if(StringUtils.isBlank(barrierCodeAll)){ QueryWrapper<Barrier> wrapper = new QueryWrapper<>(); wrapper.select(" code "); List<Barrier> list = barrierService.list(wrapper); String collect = list.stream().map(Barrier::getCode).collect(Collectors.joining(",")); redisTemplate.opsForValue().set("barrierCode_all",collect); barrierCodeAll = collect; } for (String s : barrierCodeAll.split(",")) { Barrier barrier = barrierService.findByCode(s); long between = ChronoUnit.SECONDS.between(barrier.getUpdateTime(), LocalDateTime.now()); if(between>121){ Map<String,Object> map = new HashMap<>(); map.put("parkName",parkService.getOneById(barrier.getParkId()).getName()); map.put("type",barrier.getType()==0?"出口":"入口"); map.put("downTime",barrier.getUpdateTime()); resultlist.add(map); } } Collections.sort(resultlist, (m1, m2)-> String.valueOf(m2.get("downTime")).compareTo(String.valueOf(m1.get("downTime")))); // lamuda排序 return R.ok(resultlist); } } src/main/java/com/boying/controller/ParkController.java
@@ -1,18 +1,24 @@ package com.boying.controller; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.boying.common.R; import com.boying.entity.EditParkNumLog; import com.boying.entity.EnterPark; import com.boying.entity.Park; import com.boying.entity.User; import com.boying.service.EditParkNumLogService; import com.boying.service.EnterParkService; import com.boying.service.ParkService; import com.boying.service.UserService; import com.boying.util.IpUtil; import com.boying.util.RedisJsonUtil; import lombok.RequiredArgsConstructor; import org.apache.catalina.security.SecurityUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.GetMapping; @@ -20,7 +26,10 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -38,6 +47,7 @@ private final UserService userService; private final RedisJsonUtil redisJsonUtil; private final EnterParkService enterParkService; private final EditParkNumLogService editParkNumLogService; @PostMapping("/findPage") public Object findPage(Page page) { @@ -145,7 +155,7 @@ } } @PostMapping("/editParkCarNum") public Object editParkCarNum(Park park) { public Object editParkCarNum(HttpServletRequest request, Park park) { Park byId = parkService.getById(park.getId()); if(byId == null){ return R.failed("未查询到该停车场"); @@ -154,11 +164,26 @@ redisTemplate.opsForValue().set("car_park_" + byId.getId(),park.getCarNum()+"",30, TimeUnit.DAYS); redisTemplate.opsForValue().set("park_up_" + byId.getId(),"true",30, TimeUnit.DAYS); parkService.updateById(byId); String jsonValue = JSON.toJSONString(park); redisTemplate.opsForValue().set("park-"+park.getId(), jsonValue); String ipAddr = IpUtil.getIpAddr(request); int num = byId.getNum(); int newNum = park.getNum(); EditParkNumLog numLog = new EditParkNumLog(); numLog.setIp(ipAddr); numLog.setNum(num); numLog.setNewNum(newNum); numLog.setCreateTime(LocalDateTime.now()); editParkNumLogService.save(numLog); return R.ok(null,"修改成功"); } } @PostMapping("/getParkCar") public Object getParkCar(Page page, Integer parkId,String carNo) { QueryWrapper<EnterPark> enterParkQueryWrapper = new QueryWrapper<>(); src/main/java/com/boying/entity/EditParkNumLog.java
New file @@ -0,0 +1,48 @@ package com.boying.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.boying.common.BaseEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.persistence.Column; import javax.persistence.Entity; /** * @author kdq * @version 1.0.0 * @ClassName EditParkNumLog.java * @Description TODO * @createTime 2024年09月26日 10:25:00 */ @Data @TableName("edit_park_num_log") @javax.persistence.Table(name = "edit_park_num_log") @Entity @org.hibernate.annotations.Table(appliesTo = "edit_park_num_log", comment = "修改车位数记录表") @ApiModel(value = "修改车位数记录表") public class EditParkNumLog extends BaseEntity<EditParkNumLog> { @ApiModelProperty(value = "ip地址") @Column(columnDefinition = "varchar(100) comment 'ip地址'") private String ip; @ApiModelProperty(value = "用户名称") @Column(columnDefinition = "varchar(100) comment '用户名称'") private String username; @ApiModelProperty(value = "原车位数") @Column(columnDefinition = "int comment '原车位数'") private int num; @ApiModelProperty(value = "新车位数") @Column(columnDefinition = "int comment '新车位数'") private int newNum; @ApiModelProperty(value = "停车场名称") @Column(columnDefinition = "varchar(100) comment '停车场名称'") private String parkName; } src/main/java/com/boying/mapper/EditParkNumLogMapper.java
New file @@ -0,0 +1,17 @@ package com.boying.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.boying.entity.EditParkNumLog; import com.boying.entity.Park; import org.apache.ibatis.annotations.Mapper; /** * @author kdq * @version 1.0.0 * @ClassName ParkService.java * @Description TODO * @createTime 2022年11月20日 10:33:00 */ @Mapper public interface EditParkNumLogMapper extends BaseMapper<EditParkNumLog> { } src/main/java/com/boying/service/EditParkNumLogService.java
New file @@ -0,0 +1,16 @@ package com.boying.service; import com.baomidou.mybatisplus.extension.service.IService; import com.boying.entity.EditParkNumLog; import com.boying.entity.LedShow; /** * @author kdq * @version 1.0.0 * @ClassName LedShowService.java * @Description TODO * @createTime 2022年11月21日 08:30:00 */ public interface EditParkNumLogService extends IService<EditParkNumLog> { } src/main/java/com/boying/service/impl/EditParkNumLogServiceImpl.java
New file @@ -0,0 +1,23 @@ package com.boying.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.boying.entity.EditParkNumLog; import com.boying.entity.LedShow; import com.boying.mapper.EditParkNumLogMapper; import com.boying.mapper.LedShowMapper; import com.boying.service.EditParkNumLogService; import com.boying.service.LedShowService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; /** * @author kdq * @version 1.0.0 * @ClassName LedShowServiceImpl.java * @Description TODO * @createTime 2022年11月21日 08:31:00 */ @Service @AllArgsConstructor public class EditParkNumLogServiceImpl extends ServiceImpl<EditParkNumLogMapper, EditParkNumLog> implements EditParkNumLogService { } src/main/java/com/boying/util/IpUtil.java
New file @@ -0,0 +1,111 @@ package com.boying.util; import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; public class IpUtil { public static String getIpAddr1(HttpServletRequest request) { String ipAddress = null; try { ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); if (ipAddress.equals("127.0.0.1")) { // 根据网卡取本机配置的IP InetAddress inet = null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ipAddress = inet.getHostAddress(); } } // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length() // = 15 if (ipAddress.indexOf(",") > 0) { ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); } } } catch (Exception e) { ipAddress = ""; } // ipAddress = this.getRequest().getRemoteAddr(); return "0:0:0:0:0:0:0:1".equals(ipAddress) ? "127.0.0.1" : ipAddress; } /** * 获取真实ip地址,不返回内网地址 * * @param request * @return */ public static String getIpAddr2(HttpServletRequest request) { //目前则是网关ip String ip = request.getHeader("X-Real-IP"); if (ip != null && !"".equals(ip) && !"unknown".equalsIgnoreCase(ip)) { return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; } ip = request.getHeader("X-Forwarded-For"); if (ip != null && !"".equals(ip) && !"unknown".equalsIgnoreCase(ip)) { int index = ip.indexOf(','); if (index != -1) { //只获取第一个值 return ip.substring(0, index); } else { return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; } } else { //取不到真实ip则返回空,不能返回内网地址。 return ""; } } //其中ip的获取方式 public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("X-Real-IP"); //LOGGER.error("X-Real-IP:"+ip); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("http_client_ip"); // LOGGER.error("http_client_ip:"+ip); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); // LOGGER.error("getRemoteAddr:"+ip); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); // LOGGER.error("Proxy-Client-IP:"+ip); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); // LOGGER.error("WL-Proxy-Client-IP:"+ip); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); // LOGGER.error("HTTP_X_FORWARDED_FOR:"+ip); } // 如果是多级代理,那么取第一个ip为客户ip if (ip != null && ip.indexOf(",") != -1) { ip = ip.substring(ip.lastIndexOf(",") + 1, ip.length()).trim(); // LOGGER.error("ip:"+ip); } return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; } }