kongdeqiang
2024-09-26 7156119e51320afd0ffdd0723cd983fd415d61d9
fix : 新增修改车数日志
2个文件已修改
5个文件已添加
275 ■■■■■ 已修改文件
src/main/java/com/boying/controller/BarrierController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/controller/ParkController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/entity/EditParkNumLog.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/mapper/EditParkNumLogMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/service/EditParkNumLogService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/service/impl/EditParkNumLogServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/util/IpUtil.java 111 ●●●●● 补丁 | 查看 | 原始文档 | 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;
    }
}