kongdeqiang
2024-04-22 7bc78d8f70a4d11e46f8bd640228804a3dd0dc68
src/main/java/com/boying/controller/car/PlateServlet2.java
@@ -16,6 +16,8 @@
import com.google.gson.JsonParser;
import com.sun.media.jfxmedia.track.Track;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -33,6 +35,7 @@
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Base64;
@@ -44,8 +47,9 @@
 * Servlet implementation class PlateServlet
 */
@Controller
@RequestMapping("/car2")
@RequestMapping("/ffzf/car2")
@RequiredArgsConstructor
@Tag(description = "ffzf/car3" , name = "泊车流程接口" )
public class PlateServlet2 extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Value("${ffpark.logPath}")
@@ -60,6 +64,7 @@
    private final TicketService ticketService;
    private final CostRuleService costRuleService;
    private final WhiteListService whiteListService;
    private final OutParkLogService outParkLogService;
    private final String LEDURL = "http://192.168.31.212:9988/LedShow/IGetResultDataAllLine";
    /**
@@ -120,20 +125,41 @@
        out.close();
    }
//    protected void easyOpen(HttpServletRequest request, HttpServletResponse response) throws IOException {
//        response.setContentType("text/json");
//        PrintWriter out = response.getWriter();
//        out.println("{\"Response_AlarmInfoPlate\":{\"info\":\"ok\",\"content\":\"...\",\"is_pay\":\"true\",\"ivs_ioctrl\":{\"delay\":800,\"io\":0,\"value\":2}}}");
//        out.flush();
//        out.close();
//    }
    protected void easyOpen(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/json");
        PrintWriter out = response.getWriter();
        out.println("{\"Response_AlarmInfoPlate\":{\"info\":\"ok\",\"content\":\"...\",\"is_pay\":\"true\"}}");
        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();
        out.println("{\"Response_AlarmInfoPlate\":{\"info\":\"error\",\"content\":\"...\",\"is_pay\":\"false\"}}");
        out.flush();
        out.close();
    }
    @PostMapping("/status")
    @Operation(summary = "相机心跳接口" , description = "相机心跳接口" )
    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());
        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){
                //待开闸
@@ -145,9 +171,11 @@
                    int i = Integer.parseInt(redisnum);
                    i--;
                    if(i<0){
                        String s= "2."+barrier.getCarNo()+"闸机手动启动,场内停车数为"+i+"\n";
                        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."+barrier.getCarNo()+"闸机手动启动,场内停车数为"+i+"\n";
                        redisTemplate.opsForValue().set("car_park_" + park.getId(),Integer.toString(i),30, TimeUnit.DAYS);
                        redisTemplate.opsForValue().set("park_up_" + park.getId(),"true",30, TimeUnit.DAYS);
                    }
@@ -158,31 +186,52 @@
                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){
                            redisTemplate.opsForValue().set("car_park_" + park.getId(),"0",30, TimeUnit.DAYS);
                            redisTemplate.opsForValue().set("park_up_" + park.getId(),"true",30, TimeUnit.DAYS);
                        }else {
                            redisTemplate.opsForValue().set("car_park_" + park.getId(),Integer.toString(i),30, TimeUnit.DAYS);
                            redisTemplate.opsForValue().set("park_up_" + park.getId(),"true",30, TimeUnit.DAYS);
                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);
                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";
                                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";
                                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());
                    }
                    outPark.setStatus2(1);
                    outParkService.saveOrUpdate(outPark);
                    easyOpen(request,response);
                }
                if(barrier.getType() == 1){
                    boolean in = barrierService.getDateDifIn(barrier.getId());
                    boolean in = barrierService.getDateDifIn(park.getId());
                    if(in){
                        inLedShowDefault(park.getId(),request,response);
                    }
@@ -194,12 +243,15 @@
                }
            }
        }else {
            easyNoOpen(request,response);
        }
    }
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    @PostMapping("/PlateServlet")
    @Operation(summary = "车辆识别接口" , description = "车辆识别接口" )
    protected void info(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String s= "";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
@@ -261,29 +313,31 @@
                    s+="查询道闸为空\n";
                }else{
                    if(barrier.getType()==0){
                        easyOpen(request,response);
                        //noOpen(request,response);
                        outPark(license, barrier.getId(), barrier.getParkId(),request,response);
                        s+=license+"-保存出场记录\n";
//                        outPark(license, barrier.getId(), barrier.getParkId(),request,response);
//                        s+=license+"-保存出场记录\n";
                    }else{
                        String num = redisTemplate.opsForValue().get("car_park_" +  barrier.getParkId());
                        if(StringUtils.isBlank(num)){
                            num = "0";
                            redisTemplate.opsForValue().set("car_park_" + barrier.getParkId(),num,30, TimeUnit.DAYS);
                            redisTemplate.opsForValue().set("park_up_" + barrier.getParkId(),"true",30, TimeUnit.DAYS);
                        }
                        Park byId = parkService.getById(barrier.getParkId());
                        if(Integer.parseInt(num) >= byId.getNum() ){
                            //led显示
                            inLedFullShow(code, license,barrier.getParkId(),request,response);
                        }else {
                            //led显示
                            inLedShow(code, license,barrier.getParkId(),request,response);
                            enterPark(license,barrier.getId(),barrier.getParkId());
                            s+=license+"-保存入场记录\n";
                        }
                        easyOpen(request,response);
//                        String num = redisTemplate.opsForValue().get("car_park_" +  barrier.getParkId());
//                        if(StringUtils.isBlank(num)){
//                            num = "0";
//                            redisTemplate.opsForValue().set("car_park_" + barrier.getParkId(),num,30, TimeUnit.DAYS);
//                            redisTemplate.opsForValue().set("park_up_" + barrier.getParkId(),"true",30, TimeUnit.DAYS);
//                        }
//                        Park byId = parkService.getById(barrier.getParkId());
//                        if(Integer.parseInt(num) >= byId.getNum() ){
//                            //led显示
//                            inLedFullShow(code, license,barrier.getParkId(),request,response);
//                        }else {
//                            //led显示
//                            inLedShow(code, license,barrier.getParkId(),request,response);
//                            enterPark(license,barrier.getId(),barrier.getParkId());
//                            s+=license+"-保存入场记录\n";
//                        }
                    }
                }
                writeTxt(s);
               // writeTxt(s);
            }while(false);
        }
        catch (Exception e) {
@@ -346,6 +400,8 @@
            enterPark.setStatus(1);//发现有违章
        }
        enterParkService.saveOrUpdate(enterPark);
        String jsonValue = JSON.toJSONString(enterPark);
        redisTemplate.opsForValue().set("enterPark_dif_"+ parkId, jsonValue);
        Barrier barrier = barrierService.getById(barrierId);
        barrier.setType2(1);
@@ -403,6 +459,8 @@
                    byCarNoAndBarrierId.setStatus(1);
                    byCarNoAndBarrierId.setStatus2(1);
                    outParkService.saveOrUpdate(byCarNoAndBarrierId);
                    String jsonValue = JSON.toJSONString(byCarNoAndBarrierId);
                    redisTemplate.opsForValue().set("outPark_dif_"+ barrierId, jsonValue);
                    return 0.0;
                }else{
                    if(w.getParkIds()!=null){
@@ -417,6 +475,8 @@
                                    byCarNoAndBarrierId.setStatus(1);
                                    byCarNoAndBarrierId.setStatus2(1);
                                    outParkService.saveOrUpdate(byCarNoAndBarrierId);
                                    String jsonValue = JSON.toJSONString(byCarNoAndBarrierId);
                                    redisTemplate.opsForValue().set("outPark_dif_"+ barrierId, jsonValue);
                                    return 0.0;
                                }
                            }
@@ -427,10 +487,14 @@
        }
        if(outPark.getPrice()==0&&outPark.getStatus3()==0){
            System.out.println(outPark.getCarNo()+"该车不需要缴费");
            String jsonValue = JSON.toJSONString(outPark);
            redisTemplate.opsForValue().set("outPark_dif_"+ barrierId, jsonValue);
            outLedShow(barrier.getCode(),barrier.getCarNo(),outPark.getPrice(),toDayHrMinSec,barrier.getParkId(),request,response,0);
        }else {
            //需要缴费或者有违章
            System.out.println(outPark.getCarNo()+"该车需要缴费"+outPark.getPrice());
            String jsonValue = JSON.toJSONString(outPark);
            redisTemplate.opsForValue().set("outPark_dif_"+ barrierId, jsonValue);
            outLedShow(barrier.getCode(),barrier.getCarNo(),outPark.getPrice(),toDayHrMinSec,barrier.getParkId(),request,response,1);
        }
        barrierService.saveOrUpdate(barrier);