kongdeqiang
2024-12-04 80cacfd0dcee0174f2a8d9ae322a2fcf857cef63
src/main/java/com/boying/controller/car/PlateServlet3.java
@@ -12,6 +12,7 @@
import com.boying.service.*;
import com.boying.util.DateUtilOther;
import com.boying.util.FileUtil;
import com.boying.util.RedisJsonUtil;
import com.boying.util.StringUtil;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@@ -33,12 +34,15 @@
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Base64;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
@@ -60,6 +64,8 @@
    private final WhiteListService whiteListService;
    private final FileInfoService fileInfoService;
    private final TicketBlackService ticketBlackService;
    private final OutParkLogService outParkLogService;
   // private final RedisJsonUtil redisJsonUtil;
    private final String LEDURL = "http://192.168.31.212:9988/LedShow/IGetResultDataAllLine";
    /**
@@ -128,6 +134,14 @@
        out.close();
    }
    protected void easyOpen2(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/json");
        PrintWriter out = response.getWriter();
        out.println("{\"Response_AlarmInfoPlate\":{\"ivs_ioctrl\":{\"delay\":1000,\"io\":0,\"value\":2}}}");
        out.flush();
        out.close();
    }
    protected void easyNoOpen(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/json");
        PrintWriter out = response.getWriter();
@@ -139,9 +153,16 @@
    @PostMapping("/status")
    public void heart(String serialno,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        Barrier barrier = barrierService.findByCode(serialno);
        Park park = parkService.getById(barrier.getParkId());
        String redis = redisTemplate.opsForValue().get("park_up_" + park.getId());
        if(barrier == null){
            return;
        }
        Park park = parkService.getOneById(barrier.getParkId());
       // Park park = parkService.getById(barrier.getParkId());
       // String redis = redisTemplate.opsForValue().get("park_up_" + park.getId());
        String redisnum = redisTemplate.opsForValue().get("car_park_" + park.getId());
        if(StringUtils.isBlank(redisnum)){
            redisnum = "0";
        }
        if(barrier!=null){
            if(barrier.getType2()==1){
                //待开闸
@@ -170,47 +191,65 @@
                barrier.setStatus(0);
                barrier.setUpdateTime(LocalDateTime.now());
                barrierService.saveOrUpdate(barrier);
                String jsonValue = JSON.toJSONString(barrier);
                redisTemplate.opsForValue().set("barrier-"+barrier.getCode(), jsonValue);
                easyOpen(request,response);
            }else {
                //不需开闸
                barrier.setStatus(0);
                barrier.setUpdateTime(LocalDateTime.now());
                barrierService.saveOrUpdate(barrier);
                OutPark outPark = outParkService.count4(barrier.getId());
                if(outPark!=null){
                    if(barrier.getType() == 0){
                        int i = Integer.parseInt(redisnum);
                        i--;
                        if(i<0){
                            String s= "2."+outPark.getCarNo()+"缴费完成,场内停车数为"+i+"\n";
                            writeTxt2(s);
                            redisTemplate.opsForValue().set("car_park_" + park.getId(),"0",30, TimeUnit.DAYS);
                            redisTemplate.opsForValue().set("park_up_" + park.getId(),"true",30, TimeUnit.DAYS);
                        }else {
                            String s= "2."+outPark.getCarNo()+"缴费完成,场内停车数为"+i+"\n";
                            writeTxt2(s);
                            redisTemplate.opsForValue().set("car_park_" + park.getId(),Integer.toString(i),30, TimeUnit.DAYS);
                            redisTemplate.opsForValue().set("park_up_" + park.getId(),"true",30, TimeUnit.DAYS);
                        }
                    }
                    outPark.setStatus2(1);
                    outParkService.saveOrUpdate(outPark);
                    easyOpen(request,response);
                    enterParkService.deleteByCarNo(outPark.getCarNo(), barrier.getParkId());
                LocalDateTime now = LocalDateTime.now();
                LocalDateTime updateTime = barrier.getUpdateTime();
                Duration duration = Duration.between(updateTime,now);
                long minutes = duration.toMinutes();
                if(minutes>=2){
                    barrier.setStatus(0);
                    barrier.setUpdateTime(LocalDateTime.now());
                    barrierService.saveOrUpdate(barrier);
                }
                if(barrier.getType() == 1){
                    boolean in = barrierService.getDateDifIn(barrier.getId());
                    if(in){
                        inLedShowDefault(park.getId(),request,response);
                String jsonValue = JSON.toJSONString(barrier);
                redisTemplate.opsForValue().set("barrier-"+barrier.getCode(), jsonValue);
                if(barrier.getType() == 0){
                    OutPark outPark = outParkService.count4(barrier.getId());
                    if(outPark!=null){
                        if(barrier.getType() == 0){
                            int i = Integer.parseInt(redisnum);
                            i--;
                            if(i<0){
                                String s= "2."+outPark.getCarNo()+"缴费完成,场内停车数为"+i+"\n";
                                writeTxt2(s);
                                redisTemplate.opsForValue().set("car_park_" + park.getId(),"0",30, TimeUnit.DAYS);
                                redisTemplate.opsForValue().set("park_up_" + park.getId(),"true",30, TimeUnit.DAYS);
                            }else {
                                String s= "2."+outPark.getCarNo()+"缴费完成,场内停车数为"+i+"\n";
                                writeTxt2(s);
                                redisTemplate.opsForValue().set("car_park_" + park.getId(),Integer.toString(i),30, TimeUnit.DAYS);
                                redisTemplate.opsForValue().set("park_up_" + park.getId(),"true",30, TimeUnit.DAYS);
                            }
                        }
                        outPark.setStatus2(1);
                        outParkService.saveOrUpdate(outPark);
                        easyOpen(request,response);
                        OutParkLog byOutPark = outParkLogService.getByOutPark(outPark.getCarNo(), outPark.getId());
                        byOutPark.setOpenTime(LocalDateTime.now());
                        outParkLogService.saveOrUpdate(byOutPark);
                        enterParkService.deleteByCarNo(outPark.getCarNo(), barrier.getParkId());
                        redisTemplate.delete("outPark-"+outPark.getBarrierId());
                    }
                }else if(barrier.getType() == 0){
                    boolean out = barrierService.getDateDifOut(barrier.getId());
                    if(out){
                        outLedShowDefault(request,response);
                    }
                }
            }
            if(barrier.getType() == 1){
                boolean in = barrierService.getDateDifIn(park.getId());
                if(in){
                    inLedShowDefault(park.getId(),request,response);
                }
            }else if(barrier.getType() == 0){
                boolean out = barrierService.getDateDifOut(barrier.getId());
                if(out){
                    outLedShowDefault(request,response);
                }
            }
        }else {
            easyNoOpen(request,response);
        }
@@ -305,8 +344,8 @@
                            inLedFullShow(code, license,barrier.getParkId(),request,response);
                        }else {
                            //led显示
                            inLedShow(code, license,barrier.getParkId(),request,response);
                            enterPark(license,barrier.getId(),barrier.getParkId(),fileInfo);
                            inLedShow(code, license,barrier.getParkId(),request,response);
                            s+=license+"-保存入场记录\n";
                        }
                    }
@@ -330,6 +369,15 @@
    @PostMapping("/inParkByPhone" )
    @ResponseBody
    public Object inParkByPhone( EnterPark enterPark){
        if(redisTemplate.hasKey("PHONE_"+enterPark.getParkId() + "_" + enterPark.getCarNo())){
            return R.failed(null,"请求频繁");
        }
        Pattern pattern = Pattern.compile("^1[3-9]\\d{9}$");
        Matcher matcher = pattern.matcher(enterPark.getCarNo());
        System.out.println();
        if(matcher.matches()==false){
            return R.failed(null,"输入非法数据");
        }
        Barrier barrier = barrierService.getById(enterPark.getBarrierId());
        if(barrier!=null){
            String num = redisTemplate.opsForValue().get("car_park_" +  barrier.getParkId());
@@ -351,22 +399,26 @@
                if(one == null){
                    return R.failed("未查询到车辆存在");
                }else {
                    if(one.getCarNo().equals("无牌车")){
                    if(one.getCarNo().equals("_无_") || one.getCarNo().equals("无牌车")){
                        redisTemplate.opsForValue().set("PHONE_"+enterPark.getParkId() + "_" + enterPark.getCarNo(),"true",2,TimeUnit.SECONDS);
                        enterPark.setCreateTime(LocalDateTime.now());
                        QueryWrapper<Ticket> wrapper = new QueryWrapper<>();
                        wrapper.lambda()
                                .eq(Ticket::getCarNo,enterPark.getCarNo())
                                .eq(Ticket::getPayStatus,1);
                        List<Ticket> tickets = ticketService.list(wrapper);
                        if(tickets.size()>0){
                            enterPark.setStatus(1);//发现有违章
                        }
//                        QueryWrapper<Ticket> wrapper = new QueryWrapper<>();
//                        wrapper.lambda()
//                                .eq(Ticket::getCarNo,enterPark.getCarNo())
//                                .eq(Ticket::getPayStatus,1);
//                        List<Ticket> tickets = ticketService.list(wrapper);
//                        if(tickets.size()>0){
//                            enterPark.setStatus(1);//发现有违章
//                        }
                        enterPark.setStatus(0);
                        enterPark.setIsPay(0);
                        enterPark.setPrice(0);
                        enterParkService.deleteByCarNo(enterPark.getCarNo(),enterPark.getParkId());
                        enterParkService.deleteByCarNo(one.getCarNo(),enterPark.getParkId());
                        enterParkService.save(enterPark);
                        barrier.setType2(1);
                        barrierService.updateById(barrier);
                        String jsonValue = JSON.toJSONString(barrier);
                        redisTemplate.opsForValue().set("barrier-"+barrier.getCode(), jsonValue);
                        return R.ok();
                    }else {
                        return R.failed("非法操作");
@@ -385,12 +437,23 @@
    @PostMapping("/outParkByPhone" )
    @ResponseBody
    public Object outParkByPhone(String code2,String carNo){
        Pattern pattern = Pattern.compile("^1[3-9]\\d{9}$");
        Matcher matcher = pattern.matcher(carNo);
        System.out.println();
        if(matcher.matches()==false){
            return R.failed(null,"输入非法数据");
        }
        Barrier byCode2 = barrierService.findByCode2(code2);
        QueryWrapper<EnterPark> wrapper =new QueryWrapper<>();
        wrapper.lambda()
                .eq(EnterPark::getParkId,byCode2.getParkId())
                .eq(EnterPark::getCarNo,carNo);
        EnterPark one = enterParkService.getOne(wrapper);
                .eq(EnterPark::getCarNo,carNo)
                .orderByDesc(EnterPark::getId);
        List<EnterPark> list = enterParkService.list(wrapper);
        EnterPark one = null;
        if(list !=null && list.size()>0){
            one = list.get(0);
        }
        if(one != null){
            double money = 0.0;
            String toDayHrMinSec = null;
@@ -438,7 +501,8 @@
                String s= "1."+byCode2.getCarNo()+"该车不需要缴费\n";
                writeTxt2(s);
                byCode2.setType2(1);
                barrierService.updateById(byCode2);
                String jsonValue = JSON.toJSONString(byCode2);
                redisTemplate.opsForValue().set("barrier-"+byCode2.getCode(), jsonValue);
                return R.ok(outPark);
            }else {
                //需要缴费或者有违章
@@ -446,6 +510,8 @@
                String s= "1."+byCode2.getCarNo()+"该车需要缴费\n";
                writeTxt2(s);
                barrierService.updateById(byCode2);
                String jsonValue = JSON.toJSONString(byCode2);
                redisTemplate.opsForValue().set("barrier-"+byCode2.getCode(), jsonValue);
                return R.ok(outPark);
            }
@@ -517,6 +583,9 @@
                enterPark.setImgId(fileInfo.getId());
            }
            enterParkService.saveOrUpdate(enterPark);
            String jsonValue = JSON.toJSONString(enterPark);
            redisTemplate.opsForValue().set("enterPark_dif_"+ parkId, jsonValue);
        }
    }
@@ -583,6 +652,11 @@
                    byCarNoAndBarrierId.setStatus(2);
                    byCarNoAndBarrierId.setStatus2(1);
                    outParkService.saveOrUpdate(byCarNoAndBarrierId);
                    barrierService.saveOrUpdate(barrier);
                    String jsonValue2 = JSON.toJSONString(barrier);
                    redisTemplate.opsForValue().set("barrier-"+barrier.getCode(), jsonValue2);
                    String jsonValue = JSON.toJSONString(byCarNoAndBarrierId);
                    redisTemplate.opsForValue().set("outPark_dif_"+ barrierId, jsonValue);
                    return 0.0;
                }else{
                    if(StringUtils.isNotBlank(w.getParkIds())){
@@ -597,6 +671,11 @@
                                    byCarNoAndBarrierId.setStatus(2);
                                    byCarNoAndBarrierId.setStatus2(1);
                                    outParkService.saveOrUpdate(byCarNoAndBarrierId);
                                    barrierService.saveOrUpdate(barrier);
                                    String jsonValue2 = JSON.toJSONString(barrier);
                                    redisTemplate.opsForValue().set("barrier-"+barrier.getCode(), jsonValue2);
                                    String jsonValue = JSON.toJSONString(byCarNoAndBarrierId);
                                    redisTemplate.opsForValue().set("outPark_dif_"+ barrierId, jsonValue);
                                    return 0.0;
                                }
                            }
@@ -605,19 +684,29 @@
                }
            }
        }
        barrierService.saveOrUpdate(barrier);
        String jsonValue2 = JSON.toJSONString(barrier);
        redisTemplate.opsForValue().set("barrier-"+barrier.getCode(), jsonValue2);
        if(outPark.getPrice()==0&&outPark.getStatus3()==0){
            System.out.println(outPark.getCarNo()+"该车不需要缴费");
            String s= "1."+barrier.getCarNo()+"该车不需要缴费\n";
            writeTxt2(s);
            outLedShow(barrier.getCode(),barrier.getCarNo(),outPark.getPrice(),toDayHrMinSec,barrier.getParkId(),request,response,0);
            String jsonValue = JSON.toJSONString(outPark);
            redisTemplate.opsForValue().set("outPark_dif_"+ barrierId, jsonValue);
            outLedShow(outPark,barrier.getCode(),barrier.getCarNo(),outPark.getPrice(),toDayHrMinSec,barrier.getParkId(),request,response,0);
        }else {
            //需要缴费或者有违章
            System.out.println(outPark.getCarNo()+"该车需要缴费"+outPark.getPrice());
            String s= "1."+barrier.getCarNo()+"该车需要缴费\n";
            writeTxt2(s);
            outLedShow(barrier.getCode(),barrier.getCarNo(),outPark.getPrice(),toDayHrMinSec,barrier.getParkId(),request,response,1);
            OutParkLog byOutPark = outParkLogService.getByOutPark(outPark.getCarNo(), outPark.getId());
            byOutPark.setOutTime(outPark.getCreateTime());
            byOutPark.setParkId(outPark.getParkId());
            outParkLogService.saveOrUpdate(byOutPark);
            String jsonValue = JSON.toJSONString(outPark);
            redisTemplate.opsForValue().set("outPark_dif_"+ barrierId, jsonValue);
            outLedShow(outPark,barrier.getCode(),barrier.getCarNo(),outPark.getPrice(),toDayHrMinSec,barrier.getParkId(),request,response,1);
        }
        barrierService.saveOrUpdate(barrier);
        return money;
    }
@@ -691,9 +780,9 @@
                    }
                }
            }
            if(StringUtils.isBlank(carDay) && !carNo.equals("无车牌")){
            if(StringUtils.isBlank(carDay) && !carNo.equals("_无_") && !carNo.equals("无牌车")){
                carDay = "欢迎光临";
            }else if(StringUtils.isBlank(carDay) && carNo.equals("无车牌")){
            }else if(StringUtils.isBlank(carDay) || carNo.equals("_无_") || carNo.equals("无牌车")){
                carDay = "拒绝驶入";
            }
@@ -717,7 +806,7 @@
            String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "=";
            data1 = data1.replaceAll("\r\n", "");
            if(!carNo.equals("无车牌")){
            if(!carNo.equals("_无_") && !carNo.equals("无牌车")){
                open(request,response,data1);//入场开闸
            }else {
                noOpen(request,response,data1);
@@ -769,7 +858,7 @@
        noOpen(request,response,data1);//入场开闸
    }
    public void outLedShow(String ledId,String carNo,Double price,String timeStamp,Integer parkId,HttpServletRequest request, HttpServletResponse response,int type) throws ServletException, IOException {
    public void outLedShow(OutPark outPark,String ledId,String carNo,Double price,String timeStamp,Integer parkId,HttpServletRequest request, HttpServletResponse response,int type) throws ServletException, IOException {
        String redisnum = redisTemplate.opsForValue().get("car_park_" + parkId);
        Park park = parkService.getById(parkId);
        LedBean ledBean = new LedBean();
@@ -792,28 +881,55 @@
        String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "=";
        data1 = data1.replaceAll("\r\n", "");
        if(type == 0){
            if(carNo.equals("无车牌")){
            if(carNo.equals("_无_") || carNo.equals("无牌车")){
                noOpen(request,response,data1);
            }else {
                if(timeStamp.contains("记录异常")){
                    noOpen(request,response,data1);
                    OutPark by5min = outParkService.findBy5min(carNo, parkId, LocalDateTime.now());
                    if(by5min != null){
                        //开闸
                        open(request,response,data1);
                        enterParkService.deleteByCarNo(carNo, parkId);
                        redisTemplate.opsForValue().set("park_change_in_"+parkId,"true",1, TimeUnit.DAYS);
                        int i = Integer.parseInt(redisnum);
                        i--;
                        if(i<0){
                            String s= "2."+carNo+",场内停车数为0\n";
                            writeTxt2(s);
                            redisTemplate.opsForValue().set("car_park_" + parkId,"0",30, TimeUnit.DAYS);
                            redisTemplate.opsForValue().set("park_up_" + parkId,"true",30, TimeUnit.DAYS);
                        }else {
                            String s= "2."+carNo+",场内停车数为"+i+"\n";
                            writeTxt2(s);
                            redisTemplate.opsForValue().set("car_park_" + parkId,Integer.toString(i),30, TimeUnit.DAYS);
                            redisTemplate.opsForValue().set("park_up_" + parkId,"true",30, TimeUnit.DAYS);
                        }
                    }else {
                        noOpen(request,response,data1);
                    }
                }else {
                    //开闸
                    open(request,response,data1);
                    //缓存在redis里,心跳接口去抬杆
                    String jsonValue = JSON.toJSONString(outPark);
                    redisTemplate.opsForValue().set("outPark-"+outPark.getBarrierId(), jsonValue);
                    //enterParkService.deleteByCarNo(carNo, parkId);
                    redisTemplate.opsForValue().set("park_change_in_"+parkId,"true",1, TimeUnit.DAYS);
                    int i = Integer.parseInt(redisnum);
                    i--;
                    if(i<0){
                        String s= "2."+carNo+",场内停车数为0\n";
                        writeTxt2(s);
                        redisTemplate.opsForValue().set("car_park_" + parkId,"0",30, TimeUnit.DAYS);
                        redisTemplate.opsForValue().set("park_up_" + parkId,"true",30, TimeUnit.DAYS);
                    }else {
                        String s= "2."+carNo+",场内停车数为"+i+"\n";
                        writeTxt2(s);
                        redisTemplate.opsForValue().set("car_park_" + parkId,Integer.toString(i),30, TimeUnit.DAYS);
                        redisTemplate.opsForValue().set("park_up_" + parkId,"true",30, TimeUnit.DAYS);
                    }
//                    int i = Integer.parseInt(redisnum);
//                    i--;
//                    if(i<0){
//                        String s= "2."+carNo+",场内停车数为0\n";
//                        writeTxt2(s);
//                        redisTemplate.opsForValue().set("car_park_" + parkId,"0",30, TimeUnit.DAYS);
//                        redisTemplate.opsForValue().set("park_up_" + parkId,"true",30, TimeUnit.DAYS);
//                    }else {
//                        String s= "2."+carNo+",场内停车数为"+i+"\n";
//                        writeTxt2(s);
//                        redisTemplate.opsForValue().set("car_park_" + parkId,Integer.toString(i),30, TimeUnit.DAYS);
//                        redisTemplate.opsForValue().set("park_up_" + parkId,"true",30, TimeUnit.DAYS);
//                    }
                }
            }
@@ -847,6 +963,7 @@
        if(type == 0){
            //开闸
            open(request,response,data1);
            enterParkService.deleteByCarNo(carNo,parkId);
            redisTemplate.opsForValue().set("park_change_in_"+parkId,"true",1, TimeUnit.DAYS);
            int i = Integer.parseInt(redisnum);
            i--;