kongdeqiang
2024-04-09 fb050c0dafa5363a73540dd9e52b78487e25ba0a
src/main/java/com/boying/controller/car/PlateServlet.java
@@ -36,601 +36,604 @@
/**
 * Servlet implementation class PlateServlet
 */
@Controller
@RequestMapping("/car")
@RequiredArgsConstructor
public class PlateServlet extends HttpServlet {
   private static final long serialVersionUID = 1L;
   private final SystemConfigProperties systemConfigProperties;
   private final StringRedisTemplate redisTemplate;
   private final ParkService parkService;
   private final OutParkService outParkService;
   private final EnterParkService enterParkService;
   private final BarrierService barrierService;
   private final TicketService ticketService;
   private final CostRuleService costRuleService;
   private final LedShowService ledShowService;
   private final WhiteListService whiteListService;
   /**
    * 回复开闸
    */
   protected void open(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      response.setContentType("text/json");
      PrintWriter out = response.getWriter();
      out.println("{\"Response_AlarmInfoPlate\":{\"info\":\"ok\",\"content\":\"...\",\"is_pay\":\"true\"}}");
      out.flush();
      out.close();
   }
   //转码
   public static String deCode(String str) {
      try {
         byte[] b = str.getBytes("UTF-8");//����
         String sa = new String(b);//����:��ʲô�ַ����������ʲô�ַ�������
         //String sa = new String(str.getBytes());
         return sa;
      } catch (Exception e) {
         e.printStackTrace();
         return "";
      }
   }
   protected void noOpen(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")
   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());
      String redisnum = redisTemplate.opsForValue().get("car_park_" + park.getId());
      if(StringUtils.isBlank(redis) || redis.equals("false")){
         return;
      }
      if(barrier!=null){
         if(barrier.getType2()==1){
            open(request,response);
            if(barrier.getType() == 1){
               int i = Integer.parseInt(redisnum);
               i++;
               redisTemplate.opsForValue().set("car_park_" + park.getId(),Integer.toString(i),30, TimeUnit.DAYS);
            }else 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);
               }
            }
            barrier.setType2(0);
            barrier.setUpdateTime(LocalDateTime.now());
            barrierService.saveOrUpdate(barrier);
            //outLedShowDefault(barrier.getCode(),barrier.getParkId());
            return;
         }
         barrier.setStatus(0);
         barrier.setUpdateTime(LocalDateTime.now());
         barrierService.saveOrUpdate(barrier);
         OutPark outPark = outParkService.count4(barrier.getId());
         if(outPark!=null){
            open(request,response);
             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);
               }
            }
            outPark.setStatus2(1);
            outParkService.saveOrUpdate(outPark);
            //outLedShowDefault(barrier.getCode(),barrier.getParkId());
         }else{
            noOpen(request,response);
         }
      }
   }
   /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
   @PostMapping("/PlateServlet")
   protected void info(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      String s= "";
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
      BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));
      String str = "";
      String lineStr = "";
      while((str = reader.readLine()) != null){
         lineStr += str;
      }
      System.out.println("获取到的道闸推送数据为:"+lineStr);
      JSONObject jsonObject1 = JSON.parseObject(lineStr);
      JSONObject alarmInfoPlate = jsonObject1.getJSONObject("AlarmInfoPlate");
      JSONObject result = alarmInfoPlate.getJSONObject("result");
      JSONObject plateResult = result.getJSONObject("PlateResult");
      String carNo = plateResult.get("license").toString();
      String code = alarmInfoPlate.get("serialno").toString();
      try {
         JsonParser parser=new JsonParser();
         do {
            JsonObject jsonObject=(JsonObject) parser.parse(lineStr);
            if( jsonObject == null || jsonObject.isJsonNull() ) {
               break;
            }
            JsonObject jsonInfoPlate = jsonObject.get("AlarmInfoPlate").getAsJsonObject();
            if( jsonInfoPlate == null || jsonInfoPlate.isJsonNull() ) {
               break;
            }
            JsonObject jsonResult = jsonInfoPlate.get("result").getAsJsonObject();
            if( jsonResult == null || jsonResult.isJsonNull() ) {
               break;
            }
            JsonObject jsonPlateResult = jsonResult.get("PlateResult").getAsJsonObject();
            if( jsonPlateResult == null || jsonPlateResult.isJsonNull() ) {
               break;
            }
            String license = jsonPlateResult.get("license").getAsString();//车牌号
            if( license == null || license == "") {
               break;
            }
            String serialno = jsonInfoPlate.get("serialno").getAsString();//摄像机序列号
            if( serialno == null || serialno == "" ) {
               break;
            }
            System.out.println("编号:"+serialno+"设备识别到了:"+license);
            String format = sdf.format(new Date());
            s+= format+",车牌号为:"+license+",serialno为:"+code+"  ";
            Barrier barrier = barrierService.findByCode(code);
            System.out.println("查询到道闸为:"+barrier);
            if(barrier==null){
               s+="查询道闸为空\n";
            }else{
               if(barrier.getType()==0){
                  outPark(license, barrier.getId(), barrier.getParkId());
                  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显示
                     Boolean aBoolean = inLedFullShow(code, license,barrier.getParkId());
                  }else {
                     //led显示
                     Boolean aBoolean = inLedShow(code, license,barrier.getParkId());
                     if(aBoolean){
                        //入场抬杆
                        open(request, response);
                        enterPark(license,barrier.getId(),barrier.getParkId());
                        s+=license+"-保存入场记录\n";
                     }
                  }
               }
            }
         writeTxt(s);
         }while(false);
      }
      catch (Exception e) {
         System.out.println("无入场记录");
         s+=" ,查询场内记录异常";
         writeTxt(s);
      }
   }
   private void writeTxt( String txt)
   {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
      try
      {
         FileWriter f = new FileWriter(systemConfigProperties.getLogPath()+sdf.format(new Date())+".txt",true);
         BufferedWriter bw=new BufferedWriter(f);
         bw.write(txt);
         bw.newLine();
         bw.close();
      }
      catch(Exception e)
      {
         System.out.println("打印错误");
      }
   }
   public void enterPark(String carNo,Integer barrierId,Integer parkId) {
      Park park = parkService.getById(parkId);
      int num = 0;
      String s = redisTemplate.opsForValue().get("car_park_" + parkId);
      if(park != null){
         num = park.getNum();
         if(s !=null){
            if(Integer.parseInt(s) >= num){
               redisTemplate.opsForValue().set("park_up_" + parkId,"false",30, TimeUnit.DAYS);
               return;
            }
         }else {
            s= "0";
            redisTemplate.opsForValue().set("car_park_" + parkId,s,30, TimeUnit.DAYS);
            redisTemplate.opsForValue().set("park_up_" + parkId,"true",30, TimeUnit.DAYS);
         }
      }
      enterParkService.deleteByCarNo(carNo,parkId);
      EnterPark enterPark = new EnterPark();
      enterPark.setCarNo(carNo);
      enterPark.setBarrierId(barrierId);
      enterPark.setParkId(parkId);
      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);//发现有违章
      }
      enterParkService.saveOrUpdate(enterPark);
      Barrier barrier = barrierService.getById(barrierId);
      barrier.setType2(1);
      barrierService.saveOrUpdate(barrier);
   }
   public double outPark(String carNo,Integer barrierId,Integer parkId) {
      double money = 0.0;
      EnterPark enterPark = null;
      String toDayHrMinSec = null;
      OutPark outPark = new OutPark();
      outPark.setCarNo(carNo);
      outPark.setParkId(parkId);
      outPark.setBarrierId(barrierId);
      outPark.setCreateTime(LocalDateTime.now());
      outPark.setCode(System.currentTimeMillis()+"");
      List<EnterPark> byCarNo = enterParkService.findByCarNo(carNo,parkId);
      if(byCarNo.size() == 0){
         System.out.println(carNo+"未发现场内车辆");
      }else{
         enterPark = byCarNo.get(0);
         System.out.println("入场记录:"+enterPark);
         outPark.setEnterTime(enterPark.getCreateTime());
         try {
            long l = outPark.getCreateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli() - enterPark.getCreateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli();
            outPark.setTime(l/(1000*60));
            toDayHrMinSec = DateUtilOther.millisToDayHrMinSec(l/(1000*60));
            money = costRuleService.getMoney(parkId, outPark.getEnterTime(), outPark.getCreateTime(), 1);
         } catch (ParseException e) {
            e.printStackTrace();
         }
      }
      //outPark.setPrice(Double.valueOf(String.format("%.1f", money)));
      outPark.setPrice(money);
      outPark.setStatus3(findTicket(carNo));
      outParkService.saveOrUpdate(outPark);
      Barrier barrier =barrierService.getById(barrierId);
      barrier.setCarNo(carNo);
      //led展示
      if(toDayHrMinSec == null){
         toDayHrMinSec = "不足两小时";
      }
      //判断是否在白名单
      QueryWrapper<WhiteList> wrapper = new QueryWrapper<>();
      wrapper.lambda()
            .eq(WhiteList::getCarNo,carNo);
      List<WhiteList> all = whiteListService.list(wrapper);
      if(all.size() >0){
         for(WhiteList w : all){
            if(w.getType()==0){
               outLedShow2(barrier.getCode(),barrier.getCarNo(),"月租车",toDayHrMinSec,barrier.getParkId());
               barrier.setType2(1);
               barrierService.saveOrUpdate(barrier);
               OutPark byCarNoAndBarrierId = outParkService.findByCarNoAndBarrierId(carNo, barrierId);
               byCarNoAndBarrierId.setStatus(1);
               outParkService.saveOrUpdate(byCarNoAndBarrierId);
               return 0.0;
            }else{
               if(w.getParkIds()!=null){
                  if(w.getEndTime()!=null){
                     String parkIds = w.getParkIds();
                     String[] split = parkIds.split(",");
                     for (String s : split) {
                        int pid = Integer.parseInt(s);
                        if(pid == outPark.getParkId() && System.currentTimeMillis()<w.getEndTime().getTime()){
                           outLedShow2(barrier.getCode(),barrier.getCarNo(),"月租车",toDayHrMinSec,barrier.getParkId());
                           barrier.setType2(1);
                           barrierService.saveOrUpdate(barrier);
                           OutPark byCarNoAndBarrierId = outParkService.findByCarNoAndBarrierId(carNo, barrierId);
                           byCarNoAndBarrierId.setStatus(1);
                           outParkService.saveOrUpdate(byCarNoAndBarrierId);
                           return 0.0;
                        }
                     }
                  }
               }
            }
         }
      }
      outLedShow(barrier.getCode(),barrier.getCarNo(),outPark.getPrice(),toDayHrMinSec,barrier.getParkId());
      if(outPark.getPrice()==0&&outPark.getStatus3()==0){
         barrier.setType2(1);
      }
      barrierService.saveOrUpdate(barrier);
      return money;
   }
   public int findTicket(String carNo){
      QueryWrapper<Ticket> wrapper = new QueryWrapper<>();
      wrapper.lambda()
            .eq(Ticket::getCarNo,carNo)
            .eq(Ticket::getPayStatus,1);
      List<Ticket> tickets = ticketService.list(wrapper);
      if(tickets.size()>0){
         return 1;
      }else{
         return 0;
      }
   }
   public Boolean inLedShow(String ledId,String carNo,Integer parkId){
      String num = redisTemplate.opsForValue().get("car_park_" +  parkId);
      Park byId = parkService.getById(parkId);
      int i = byId.getNum() - Integer.parseInt(num);
      if(i<0){
         i = 0;
      }
      String carType = "";
      String carDay = "";
      Barrier barrier = barrierService.findByCode(ledId);
      WhiteList byCarNo = whiteListService.getByCarNo(carNo);
      if(byCarNo == null){
         carType = "临时车";
      }else {
         if (byCarNo.getType() == 0){
            //白名单永久车辆
            carType = "月租车";
         }else {
            //白名单固定停车场车辆
            if(byCarNo.getParkId().equals(barrier.getParkId())){
               carType = "月租车";
               long l = (byCarNo.getEndTime().getTime() - byCarNo.getStartTime().getTime()) / (24 * 3600 * 1000);
               carDay = "有效期还有"+l+"天";
            }
         }
      }
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      LedShow ledShow = new LedShow();
      ledShow.setLedId(ledId);
      ledShow.setNumber(parkId);
      ledShow.setStatus(1);
      ledShow.setType(2);
      ledShow.setName(barrier.getName());
      ledShow.setIsDefault(1);
      ledShow.setPassword("boying_ffpark");
      ledShow.setTimeStamp(sdf.format(new Date()));
      ledShow.setColor1(1);
      ledShow.setColor2(2);
      ledShow.setColor3(1);
      ledShow.setColor4(2);
      ledShow.setContent1(carNo);
      ledShow.setContent2(carType);
      ledShow.setContent3("车位剩余:"+i);
      ledShow.setContent4(carDay);
      ledShow.setDisMode1(0);
      ledShow.setDisMode2(0);
      ledShow.setDisMode3(1);
      ledShow.setDisMode4(1);
      ledShow.setStatus1(0);
      ledShow.setStatus2(0);
      ledShow.setStatus3(0);
      ledShow.setStatus4(0);
      if(barrier.getIpAddress() != null){
         ledShow.setIpAddress(barrier.getIpAddress());
      }
      if(barrier.getPort() != 0){
         ledShow.setPort(barrier.getPort());
      }
      ledShow.setVoiceContent(carNo+carType+"欢迎进场");
      return ledShowService.save(ledShow);
   }
   public Boolean inLedFullShow(String ledId, String carNo, Integer parkId){
      String carType = "";
      String carDay = "";
      Barrier barrier = barrierService.findByCode(ledId);
      WhiteList byCarNo = whiteListService.getByCarNo(carNo);
      if(byCarNo == null){
         carType = "临时车";
      }else {
         if (byCarNo.getType() == 0){
            //白名单永久车辆
            carType = "月租车";
         }else {
            //白名单固定停车场车辆
            if(byCarNo.getParkId().equals(barrier.getParkId())){
               carType = "月租车";
               long l = (byCarNo.getEndTime().getTime() - byCarNo.getStartTime().getTime()) / (24 * 3600 * 1000);
               carDay = "有效期还有"+l+"天";
            }
         }
      }
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      LedShow ledShow = new LedShow();
      ledShow.setLedId(ledId);
      ledShow.setNumber(parkId);
      ledShow.setStatus(1);
      ledShow.setType(2);
      ledShow.setName(barrier.getName());
      ledShow.setIsDefault(1);
      ledShow.setPassword("boying_ffpark");
      ledShow.setTimeStamp(sdf.format(new Date()));
      ledShow.setColor1(1);
      ledShow.setColor2(2);
      ledShow.setColor3(1);
      ledShow.setColor4(2);
      ledShow.setContent1(carNo);
      ledShow.setContent2(carType);
      ledShow.setContent3("车位已满");
      ledShow.setContent4("请驶离");
      ledShow.setDisMode1(0);
      ledShow.setDisMode2(0);
      ledShow.setDisMode3(1);
      ledShow.setDisMode4(1);
      ledShow.setStatus1(0);
      ledShow.setStatus2(0);
      ledShow.setStatus3(0);
      ledShow.setStatus4(0);
      if(barrier.getIpAddress() != null){
         ledShow.setIpAddress(barrier.getIpAddress());
      }
      if(barrier.getPort() != 0){
         ledShow.setPort(barrier.getPort());
      }
      ledShow.setVoiceContent("车位已满请驶离");
      return ledShowService.save(ledShow);
   }
   public Boolean outLedShow(String ledId,String carNo,Double price,String timeStamp,Integer parkId){
      Barrier barrier = barrierService.findByCode(ledId);
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      LedShow ledShow = new LedShow();
      ledShow.setLedId(ledId);
      ledShow.setNumber(parkId);
      ledShow.setStatus(1);
      ledShow.setType(2);
      ledShow.setName(barrier.getName());
      ledShow.setIsDefault(1);
      ledShow.setPassword("boying_ffpark");
      ledShow.setTimeStamp(sdf.format(new Date()));
      ledShow.setColor1(1);
      ledShow.setColor2(2);
      ledShow.setColor3(1);
      ledShow.setColor4(2);
      ledShow.setContent1(carNo);
      ledShow.setContent2("停车"+timeStamp);
      ledShow.setContent3("交费"+price+"元");
      ledShow.setContent4("禁止闯杆");
      ledShow.setDisMode1(0);
      ledShow.setDisMode2(1);
      ledShow.setDisMode3(1);
      ledShow.setDisMode4(0);
      ledShow.setStatus1(0);
      ledShow.setStatus2(0);
      ledShow.setStatus3(0);
      ledShow.setStatus4(0);
      if(barrier.getIpAddress() != null){
         ledShow.setIpAddress(barrier.getIpAddress());
      }
      if(barrier.getPort() != 0){
         ledShow.setPort(barrier.getPort());
      }
      ledShow.setVoiceContent(carNo+"停车"+timeStamp+"交费"+price+"元");
      return ledShowService.save(ledShow);
   }
   public Boolean outLedShow2(String ledId,String carNo,String text,String timeStamp,Integer parkId){
      Barrier barrier = barrierService.findByCode(ledId);
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      LedShow ledShow = new LedShow();
      ledShow.setLedId(ledId);
      ledShow.setNumber(parkId);
      ledShow.setStatus(1);
      ledShow.setType(2);
      ledShow.setName(barrier.getName());
      ledShow.setIsDefault(1);
      ledShow.setPassword("boying_ffpark");
      ledShow.setTimeStamp(sdf.format(new Date()));
      ledShow.setColor1(1);
      ledShow.setColor2(2);
      ledShow.setColor3(1);
      ledShow.setColor4(2);
      ledShow.setContent1(carNo);
      ledShow.setContent2("停车"+timeStamp);
      ledShow.setContent3(text);
      ledShow.setContent4("禁止闯杆");
      ledShow.setDisMode1(0);
      ledShow.setDisMode2(1);
      ledShow.setDisMode3(1);
      ledShow.setDisMode4(0);
      ledShow.setStatus1(0);
      ledShow.setStatus2(0);
      ledShow.setStatus3(0);
      ledShow.setStatus4(0);
      if(barrier.getIpAddress() != null){
         ledShow.setIpAddress(barrier.getIpAddress());
      }
      if(barrier.getPort() != 0){
         ledShow.setPort(barrier.getPort());
      }
      ledShow.setVoiceContent(carNo+"停车"+timeStamp);
      return ledShowService.save(ledShow);
   }
   public Boolean outLedShowDefault(String ledId,Integer parkId){
      Barrier barrier = barrierService.findByCode(ledId);
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      LedShow ledShow = new LedShow();
      ledShow.setLedId(ledId);
      ledShow.setNumber(parkId);
      ledShow.setStatus(1);
      ledShow.setType(2);
      ledShow.setName(barrier.getName());
      ledShow.setIsDefault(1);
      ledShow.setPassword("boying_ffpark");
      ledShow.setTimeStamp(sdf.format(new Date()));
      ledShow.setColor1(1);
      ledShow.setColor2(1);
      ledShow.setColor3(1);
      ledShow.setColor4(1);
      ledShow.setContent1("欢迎光临");
      ledShow.setContent2("一车一杆");
      ledShow.setContent3("减速慢行");
      ledShow.setContent4("安全行驶");
      ledShow.setDisMode1(0);
      ledShow.setDisMode2(0);
      ledShow.setDisMode3(0);
      ledShow.setDisMode4(0);
      ledShow.setStatus1(0);
      ledShow.setStatus2(0);
      ledShow.setStatus3(0);
      ledShow.setStatus4(0);
      if(barrier.getIpAddress() != null){
         ledShow.setIpAddress(barrier.getIpAddress());
      }
      if(barrier.getPort() != 0){
         ledShow.setPort(barrier.getPort());
      }
      ledShow.setVoiceContent("");
      return ledShowService.save(ledShow);
   }
}
//@Controller
//@RequestMapping("/car1")
//@RequiredArgsConstructor
//public class PlateServlet extends HttpServlet {
//   private static final long serialVersionUID = 1L;
//   private final SystemConfigProperties systemConfigProperties;
//   private final StringRedisTemplate redisTemplate;
//   private final ParkService parkService;
//   private final OutParkService outParkService;
//   private final EnterParkService enterParkService;
//   private final BarrierService barrierService;
//   private final TicketService ticketService;
//   private final CostRuleService costRuleService;
//   private final LedShowService ledShowService;
//   private final WhiteListService whiteListService;
//
//   /**
//    * 回复开闸
//    */
//   protected void open(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//      response.setContentType("text/json");
//      PrintWriter out = response.getWriter();
//      out.println("{\"Response_AlarmInfoPlate\":{\"info\":\"ok\",\"content\":\"...\",\"is_pay\":\"true\"}}");
//      out.flush();
//      out.close();
//   }
//
//   //转码
//   public static String deCode(String str) {
//      try {
//         byte[] b = str.getBytes("UTF-8");//����
//         String sa = new String(b);//����:��ʲô�ַ����������ʲô�ַ�������
//         //String sa = new String(str.getBytes());
//
//         return sa;
//      } catch (Exception e) {
//         e.printStackTrace();
//         return "";
//      }
//   }
//
//   protected void noOpen(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")
//   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());
//      String redisnum = redisTemplate.opsForValue().get("car_park_" + park.getId());
//      if(StringUtils.isBlank(redis) || redis.equals("false")){
//         return;
//      }
//      if(barrier!=null){
//         if(barrier.getType2()==1){
//            open(request,response);
//            if(barrier.getType() == 1){
//               int i = Integer.parseInt(redisnum);
//               i++;
//               redisTemplate.opsForValue().set("car_park_" + park.getId(),Integer.toString(i),30, TimeUnit.DAYS);
//            }else 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);
//               }
//
//            }
//            barrier.setType2(0);
//            barrier.setUpdateTime(LocalDateTime.now());
//            barrierService.saveOrUpdate(barrier);
//            //outLedShowDefault(barrier.getCode(),barrier.getParkId());
//            return;
//         }
//         barrier.setStatus(0);
//         barrier.setUpdateTime(LocalDateTime.now());
//         barrierService.saveOrUpdate(barrier);
//
//         OutPark outPark = outParkService.count4(barrier.getId());
//         if(outPark!=null){
//            open(request,response);
//             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);
//               }
//            }
//            outPark.setStatus2(1);
//            outParkService.saveOrUpdate(outPark);
//            //outLedShowDefault(barrier.getCode(),barrier.getParkId());
//
//         }else{
//            noOpen(request,response);
//         }
//      }
//   }
//   /**
//    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
//    */
//   @PostMapping("/PlateServlet")
//   protected void info(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//      String s= "";
//      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
//      BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));
//      String str = "";
//      String lineStr = "";
//      while((str = reader.readLine()) != null){
//         lineStr += str;
//      }
//      System.out.println("获取到的道闸推送数据为:"+lineStr);
//
//      JSONObject jsonObject1 = JSON.parseObject(lineStr);
//      JSONObject alarmInfoPlate = jsonObject1.getJSONObject("AlarmInfoPlate");
//      JSONObject result = alarmInfoPlate.getJSONObject("result");
//      JSONObject plateResult = result.getJSONObject("PlateResult");
//      String carNo = plateResult.get("license").toString();
//      String code = alarmInfoPlate.get("serialno").toString();
//
//      try {
//         JsonParser parser=new JsonParser();
//         do {
//            JsonObject jsonObject=(JsonObject) parser.parse(lineStr);
//            if( jsonObject == null || jsonObject.isJsonNull() ) {
//               break;
//            }
//
//            JsonObject jsonInfoPlate = jsonObject.get("AlarmInfoPlate").getAsJsonObject();
//            if( jsonInfoPlate == null || jsonInfoPlate.isJsonNull() ) {
//               break;
//            }
//
//            JsonObject jsonResult = jsonInfoPlate.get("result").getAsJsonObject();
//            if( jsonResult == null || jsonResult.isJsonNull() ) {
//               break;
//            }
//
//            JsonObject jsonPlateResult = jsonResult.get("PlateResult").getAsJsonObject();
//            if( jsonPlateResult == null || jsonPlateResult.isJsonNull() ) {
//               break;
//            }
//
//            String license = jsonPlateResult.get("license").getAsString();//车牌号
//            if( license == null || license == "") {
//               break;
//            }
//
//            String serialno = jsonInfoPlate.get("serialno").getAsString();//摄像机序列号
//            if( serialno == null || serialno == "" ) {
//               break;
//            }
//
//            System.out.println("编号:"+serialno+"设备识别到了:"+license);
//            String format = sdf.format(new Date());
//            s+= format+",车牌号为:"+license+",serialno为:"+code+"  ";
//
//            Barrier barrier = barrierService.findByCode(code);
//            System.out.println("查询到道闸为:"+barrier);
//            if(barrier==null){
//               s+="查询道闸为空\n";
//            }else{
//               if(barrier.getType()==0){
//                  //noOpen(request,response);
//                  outPark(license, barrier.getId(), barrier.getParkId());
//                  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显示
//                     Boolean aBoolean = inLedFullShow(code, license,barrier.getParkId());
//                     noOpen(request,response);
//                  }else {
//                     //led显示
//                     Boolean aBoolean = inLedShow(code, license,barrier.getParkId());
//                     if(aBoolean){
//                        //入场抬杆
//                        open(request, response);
//                        enterPark(license,barrier.getId(),barrier.getParkId());
//                        s+=license+"-保存入场记录\n";
//                     }
//                  }
//               }
//            }
//         writeTxt(s);
//         }while(false);
//      }
//      catch (Exception e) {
//         System.out.println("无入场记录");
//         s+=" ,查询场内记录异常";
//         writeTxt(s);
//      }
//   }
//
//
//   private void writeTxt( String txt)
//   {
//      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
//      try
//      {
//         FileWriter f = new FileWriter(systemConfigProperties.getLogPath()+sdf.format(new Date())+".txt",true);
//         BufferedWriter bw=new BufferedWriter(f);
//         bw.write(txt);
//         bw.newLine();
//         bw.close();
//      }
//      catch(Exception e)
//      {
//         System.out.println("打印错误");
//      }
//   }
//
//
//
//
//   public void enterPark(String carNo,Integer barrierId,Integer parkId) {
//      Park park = parkService.getById(parkId);
//      int num = 0;
//      String s = redisTemplate.opsForValue().get("car_park_" + parkId);
//      if(park != null){
//         num = park.getNum();
//         if(s !=null){
//            if(Integer.parseInt(s) >= num){
//               redisTemplate.opsForValue().set("park_up_" + parkId,"false",30, TimeUnit.DAYS);
//               return;
//            }
//         }else {
//            s= "0";
//            redisTemplate.opsForValue().set("car_park_" + parkId,s,30, TimeUnit.DAYS);
//            redisTemplate.opsForValue().set("park_up_" + parkId,"true",30, TimeUnit.DAYS);
//         }
//      }
//      enterParkService.deleteByCarNo(carNo,parkId);
//      EnterPark enterPark = new EnterPark();
//      enterPark.setCarNo(carNo);
//      enterPark.setBarrierId(barrierId);
//      enterPark.setParkId(parkId);
//
//      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);//发现有违章
//      }
//      enterParkService.saveOrUpdate(enterPark);
//
//      Barrier barrier = barrierService.getById(barrierId);
//      barrier.setType2(1);
//      barrierService.saveOrUpdate(barrier);
//   }
//
//   public double outPark(String carNo,Integer barrierId,Integer parkId) {
//      double money = 0.0;
//      EnterPark enterPark = null;
//      String toDayHrMinSec = null;
//      OutPark outPark = new OutPark();
//      outPark.setCarNo(carNo);
//      outPark.setParkId(parkId);
//      outPark.setBarrierId(barrierId);
//      outPark.setCreateTime(LocalDateTime.now());
//      outPark.setCode(System.currentTimeMillis()+"");
//      List<EnterPark> byCarNo = enterParkService.findByCarNo(carNo,parkId);
//
//      if(byCarNo.size() == 0){
//         System.out.println(carNo+"未发现场内车辆");
//      }else{
//         enterPark = byCarNo.get(0);
//         System.out.println("入场记录:"+enterPark);
//         outPark.setEnterTime(enterPark.getCreateTime());
//         try {
//            long l = outPark.getCreateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli() - enterPark.getCreateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli();
//            outPark.setTime(l/(1000*60));
//            toDayHrMinSec = DateUtilOther.millisToDayHrMinSec(l/(1000*60));
//            money = costRuleService.getMoney(parkId, outPark.getEnterTime(), outPark.getCreateTime(), 1);
//         } catch (ParseException e) {
//            e.printStackTrace();
//         }
//
//      }
//      //outPark.setPrice(Double.valueOf(String.format("%.1f", money)));
//      outPark.setPrice(money);
//      outPark.setStatus3(findTicket(carNo));
//      outParkService.saveOrUpdate(outPark);
//      Barrier barrier =barrierService.getById(barrierId);
//      barrier.setCarNo(carNo);
//      //led展示
//      if(toDayHrMinSec == null){
//         toDayHrMinSec = "不足两小时";
//      }
//      //判断是否在白名单
//      QueryWrapper<WhiteList> wrapper = new QueryWrapper<>();
//      wrapper.lambda()
//            .eq(WhiteList::getCarNo,carNo);
//      List<WhiteList> all = whiteListService.list(wrapper);
//      if(all.size() >0){
//         for(WhiteList w : all){
//            if(w.getType()==0){
//               outLedShow2(barrier.getCode(),barrier.getCarNo(),"月租车",toDayHrMinSec,barrier.getParkId());
//               barrier.setType2(1);
//               barrierService.saveOrUpdate(barrier);
//               OutPark byCarNoAndBarrierId = outParkService.findByCarNoAndBarrierId(carNo, barrierId);
//               byCarNoAndBarrierId.setStatus(1);
//               outParkService.saveOrUpdate(byCarNoAndBarrierId);
//               return 0.0;
//            }else{
//               if(w.getParkIds()!=null){
//                  if(w.getEndTime()!=null){
//                     String parkIds = w.getParkIds();
//                     String[] split = parkIds.split(",");
//                     for (String s : split) {
//                        int pid = Integer.parseInt(s);
//                        if(pid == outPark.getParkId() && System.currentTimeMillis()<w.getEndTime().getTime()){
//                           outLedShow2(barrier.getCode(),barrier.getCarNo(),"月租车",toDayHrMinSec,barrier.getParkId());
//                           barrier.setType2(1);
//                           barrierService.saveOrUpdate(barrier);
//                           OutPark byCarNoAndBarrierId = outParkService.findByCarNoAndBarrierId(carNo, barrierId);
//                           byCarNoAndBarrierId.setStatus(1);
//                           outParkService.saveOrUpdate(byCarNoAndBarrierId);
//                           return 0.0;
//                        }
//                     }
//                  }
//               }
//            }
//         }
//      }
//      outLedShow(barrier.getCode(),barrier.getCarNo(),outPark.getPrice(),toDayHrMinSec,barrier.getParkId());
//      if(outPark.getPrice()==0&&outPark.getStatus3()==0){
//         System.out.println(outPark.getCarNo()+"该车不需要缴费");
//         barrier.setType2(1);
//      }
//      barrierService.saveOrUpdate(barrier);
//      return money;
//   }
//
//   public int findTicket(String carNo){
//      QueryWrapper<Ticket> wrapper = new QueryWrapper<>();
//      wrapper.lambda()
//            .eq(Ticket::getCarNo,carNo)
//            .eq(Ticket::getPayStatus,1);
//      List<Ticket> tickets = ticketService.list(wrapper);
//      if(tickets.size()>0){
//         return 1;
//      }else{
//         return 0;
//      }
//   }
//
//   public Boolean inLedShow(String ledId,String carNo,Integer parkId){
//      String num = redisTemplate.opsForValue().get("car_park_" +  parkId);
//      Park byId = parkService.getById(parkId);
//      int i = byId.getNum() - Integer.parseInt(num);
//      if(i<0){
//         i = 0;
//      }
//      String carType = "";
//      String carDay = "";
//      Barrier barrier = barrierService.findByCode(ledId);
//      WhiteList byCarNo = whiteListService.getByCarNo(carNo);
//      if(byCarNo == null){
//         carType = "临时车";
//      }else {
//         if (byCarNo.getType() == 0){
//            //白名单永久车辆
//            carType = "月租车";
//         }else {
//            //白名单固定停车场车辆
//            if(byCarNo.getParkId().equals(barrier.getParkId())){
//               carType = "月租车";
//               long l = (byCarNo.getEndTime().getTime() - byCarNo.getStartTime().getTime()) / (24 * 3600 * 1000);
//               carDay = "有效期还有"+l+"天";
//            }
//         }
//      }
//      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//      LedShow ledShow = new LedShow();
//      ledShow.setLedId(ledId);
//      ledShow.setNumber(parkId);
//      ledShow.setStatus(1);
//      ledShow.setType(2);
//      ledShow.setName(barrier.getName());
//      ledShow.setIsDefault(1);
//      ledShow.setPassword("boying_ffpark");
//      ledShow.setTimeStamp(sdf.format(new Date()));
//      ledShow.setColor1(1);
//      ledShow.setColor2(2);
//      ledShow.setColor3(1);
//      ledShow.setColor4(2);
//      ledShow.setContent1(carNo);
//      ledShow.setContent2(carType);
//      ledShow.setContent3("车位剩余:"+i);
//      ledShow.setContent4(carDay);
//      ledShow.setDisMode1(0);
//      ledShow.setDisMode2(0);
//      ledShow.setDisMode3(1);
//      ledShow.setDisMode4(1);
//      ledShow.setStatus1(0);
//      ledShow.setStatus2(0);
//      ledShow.setStatus3(0);
//      ledShow.setStatus4(0);
//      if(barrier.getIpAddress() != null){
//         ledShow.setIpAddress(barrier.getIpAddress());
//      }
//      if(barrier.getPort() != 0){
//         ledShow.setPort(barrier.getPort());
//      }
//      ledShow.setVoiceContent(carNo+carType+"欢迎进场");
//      return ledShowService.save(ledShow);
//   }
//
//   public Boolean inLedFullShow(String ledId, String carNo, Integer parkId){
//      String carType = "";
//      String carDay = "";
//      Barrier barrier = barrierService.findByCode(ledId);
//      WhiteList byCarNo = whiteListService.getByCarNo(carNo);
//      if(byCarNo == null){
//         carType = "临时车";
//      }else {
//         if (byCarNo.getType() == 0){
//            //白名单永久车辆
//            carType = "月租车";
//         }else {
//            //白名单固定停车场车辆
//            if(byCarNo.getParkId().equals(barrier.getParkId())){
//               carType = "月租车";
//               long l = (byCarNo.getEndTime().getTime() - byCarNo.getStartTime().getTime()) / (24 * 3600 * 1000);
//               carDay = "有效期还有"+l+"天";
//            }
//         }
//      }
//      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//      LedShow ledShow = new LedShow();
//      ledShow.setLedId(ledId);
//      ledShow.setNumber(parkId);
//      ledShow.setStatus(1);
//      ledShow.setType(2);
//      ledShow.setName(barrier.getName());
//      ledShow.setIsDefault(1);
//      ledShow.setPassword("boying_ffpark");
//      ledShow.setTimeStamp(sdf.format(new Date()));
//      ledShow.setColor1(1);
//      ledShow.setColor2(2);
//      ledShow.setColor3(1);
//      ledShow.setColor4(2);
//      ledShow.setContent1(carNo);
//      ledShow.setContent2(carType);
//      ledShow.setContent3("车位已满");
//      ledShow.setContent4("请驶离");
//      ledShow.setDisMode1(0);
//      ledShow.setDisMode2(0);
//      ledShow.setDisMode3(1);
//      ledShow.setDisMode4(1);
//      ledShow.setStatus1(0);
//      ledShow.setStatus2(0);
//      ledShow.setStatus3(0);
//      ledShow.setStatus4(0);
//      if(barrier.getIpAddress() != null){
//         ledShow.setIpAddress(barrier.getIpAddress());
//      }
//      if(barrier.getPort() != 0){
//         ledShow.setPort(barrier.getPort());
//      }
//      ledShow.setVoiceContent("车位已满请驶离");
//      return ledShowService.save(ledShow);
//   }
//
//   public Boolean outLedShow(String ledId,String carNo,Double price,String timeStamp,Integer parkId){
//      Barrier barrier = barrierService.findByCode(ledId);
//      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//      LedShow ledShow = new LedShow();
//      ledShow.setLedId(ledId);
//      ledShow.setNumber(parkId);
//      ledShow.setStatus(1);
//      ledShow.setType(2);
//      ledShow.setName(barrier.getName());
//      ledShow.setIsDefault(1);
//      ledShow.setPassword("boying_ffpark");
//      ledShow.setTimeStamp(sdf.format(new Date()));
//      ledShow.setColor1(1);
//      ledShow.setColor2(2);
//      ledShow.setColor3(1);
//      ledShow.setColor4(2);
//      ledShow.setContent1(carNo);
//      ledShow.setContent2("停车"+timeStamp);
//      ledShow.setContent3("交费"+price+"元");
//      ledShow.setContent4("禁止闯杆");
//      ledShow.setDisMode1(0);
//      ledShow.setDisMode2(1);
//      ledShow.setDisMode3(1);
//      ledShow.setDisMode4(0);
//      ledShow.setStatus1(0);
//      ledShow.setStatus2(0);
//      ledShow.setStatus3(0);
//      ledShow.setStatus4(0);
//      if(barrier.getIpAddress() != null){
//         ledShow.setIpAddress(barrier.getIpAddress());
//      }
//      if(barrier.getPort() != 0){
//         ledShow.setPort(barrier.getPort());
//      }
//      ledShow.setVoiceContent(carNo+"停车"+timeStamp+"交费"+price+"元");
//      return ledShowService.save(ledShow);
//   }
//
//   public Boolean outLedShow2(String ledId,String carNo,String text,String timeStamp,Integer parkId){
//      Barrier barrier = barrierService.findByCode(ledId);
//      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//      LedShow ledShow = new LedShow();
//      ledShow.setLedId(ledId);
//      ledShow.setNumber(parkId);
//      ledShow.setStatus(1);
//      ledShow.setType(2);
//      ledShow.setName(barrier.getName());
//      ledShow.setIsDefault(1);
//      ledShow.setPassword("boying_ffpark");
//      ledShow.setTimeStamp(sdf.format(new Date()));
//      ledShow.setColor1(1);
//      ledShow.setColor2(2);
//      ledShow.setColor3(1);
//      ledShow.setColor4(2);
//      ledShow.setContent1(carNo);
//      ledShow.setContent2("停车"+timeStamp);
//      ledShow.setContent3(text);
//      ledShow.setContent4("禁止闯杆");
//      ledShow.setDisMode1(0);
//      ledShow.setDisMode2(1);
//      ledShow.setDisMode3(1);
//      ledShow.setDisMode4(0);
//      ledShow.setStatus1(0);
//      ledShow.setStatus2(0);
//      ledShow.setStatus3(0);
//      ledShow.setStatus4(0);
//      if(barrier.getIpAddress() != null){
//         ledShow.setIpAddress(barrier.getIpAddress());
//      }
//      if(barrier.getPort() != 0){
//         ledShow.setPort(barrier.getPort());
//      }
//      ledShow.setVoiceContent(carNo+"停车"+timeStamp);
//      return ledShowService.save(ledShow);
//   }
//
//   public Boolean outLedShowDefault(String ledId,Integer parkId){
//      Barrier barrier = barrierService.findByCode(ledId);
//      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//      LedShow ledShow = new LedShow();
//      ledShow.setLedId(ledId);
//      ledShow.setNumber(parkId);
//      ledShow.setStatus(1);
//      ledShow.setType(2);
//      ledShow.setName(barrier.getName());
//      ledShow.setIsDefault(1);
//      ledShow.setPassword("boying_ffpark");
//      ledShow.setTimeStamp(sdf.format(new Date()));
//      ledShow.setColor1(1);
//      ledShow.setColor2(1);
//      ledShow.setColor3(1);
//      ledShow.setColor4(1);
//      ledShow.setContent1("欢迎光临");
//      ledShow.setContent2("一车一杆");
//      ledShow.setContent3("减速慢行");
//      ledShow.setContent4("安全行驶");
//      ledShow.setDisMode1(0);
//      ledShow.setDisMode2(0);
//      ledShow.setDisMode3(0);
//      ledShow.setDisMode4(0);
//      ledShow.setStatus1(0);
//      ledShow.setStatus2(0);
//      ledShow.setStatus3(0);
//      ledShow.setStatus4(0);
//      if(barrier.getIpAddress() != null){
//         ledShow.setIpAddress(barrier.getIpAddress());
//      }
//      if(barrier.getPort() != 0){
//         ledShow.setPort(barrier.getPort());
//      }
//      ledShow.setVoiceContent("");
//      return ledShowService.save(ledShow);
//   }
//
//}