From 80cacfd0dcee0174f2a8d9ae322a2fcf857cef63 Mon Sep 17 00:00:00 2001
From: kongdeqiang <123456>
Date: 星期三, 04 十二月 2024 15:31:35 +0800
Subject: [PATCH] fix : 新增修改出场接口

---
 src/main/java/com/boying/controller/car/PlateServlet3.java |  213 ++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 155 insertions(+), 58 deletions(-)

diff --git a/src/main/java/com/boying/controller/car/PlateServlet3.java b/src/main/java/com/boying/controller/car/PlateServlet3.java
index f921468..dde6393 100644
--- a/src/main/java/com/boying/controller/car/PlateServlet3.java
+++ b/src/main/java/com/boying/controller/car/PlateServlet3.java
@@ -34,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;
 
 
 /**
@@ -131,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();
@@ -142,10 +153,16 @@
     @PostMapping("/status")
     public void heart(String serialno,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
         Barrier barrier = barrierService.findByCode(serialno);
-       // Park park = parkService.getOneById(barrier.getParkId());
-        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){
                 //寰呭紑闂�
@@ -175,17 +192,23 @@
                 barrier.setUpdateTime(LocalDateTime.now());
                 barrierService.saveOrUpdate(barrier);
 
-//                String jsonValue = JSON.toJSONString(barrier);
-//                redisTemplate.opsForValue().set("barrier-"+barrier.getCode(), jsonValue);
+                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);
+                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);
+                }
 
-//                String jsonValue = JSON.toJSONString(barrier);
-//                redisTemplate.opsForValue().set("barrier-"+barrier.getCode(), jsonValue);
+                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){
@@ -211,22 +234,22 @@
                         byOutPark.setOpenTime(LocalDateTime.now());
                         outParkLogService.saveOrUpdate(byOutPark);
                         enterParkService.deleteByCarNo(outPark.getCarNo(), barrier.getParkId());
-                      //  redisTemplate.delete("outPark-"+outPark.getBarrierId());
+                        redisTemplate.delete("outPark-"+outPark.getBarrierId());
                     }
                 }
-                if(barrier.getType() == 1){
-                    boolean in = barrierService.getDateDifIn(barrier.getId());
-                    if(in){
-                        inLedShowDefault(park.getId(),request,response);
-                    }
-                }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);
         }
@@ -321,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";
                         }
                     }
@@ -346,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());
@@ -367,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("闈炴硶鎿嶄綔");
@@ -401,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;
@@ -454,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 {
                 //闇�瑕佺即璐规垨鑰呮湁杩濈珷
@@ -462,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);
             }
 
@@ -533,6 +583,9 @@
                 enterPark.setImgId(fileInfo.getId());
             }
             enterParkService.saveOrUpdate(enterPark);
+            String jsonValue = JSON.toJSONString(enterPark);
+            redisTemplate.opsForValue().set("enterPark_dif_"+ parkId, jsonValue);
+
         }
     }
 
@@ -599,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())){
@@ -613,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;
                                 }
                             }
@@ -621,11 +684,16 @@
                 }
             }
         }
+        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());
@@ -635,9 +703,10 @@
             byOutPark.setOutTime(outPark.getCreateTime());
             byOutPark.setParkId(outPark.getParkId());
             outParkLogService.saveOrUpdate(byOutPark);
-            outLedShow(barrier.getCode(),barrier.getCarNo(),outPark.getPrice(),toDayHrMinSec,barrier.getParkId(),request,response,1);
+            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;
     }
 
@@ -711,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 = "鎷掔粷椹跺叆";
             }
 
@@ -737,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);
@@ -789,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();
@@ -812,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);
+
+                    //缂撳瓨鍦╮edis閲�,蹇冭烦鎺ュ彛鍘绘姮鏉�
+                    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);
+//                    }
                 }
 
             }
@@ -867,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--;

--
Gitblit v1.9.1