package com.boying.controller.car; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.boying.common.R; import com.boying.common.SystemConfigProperties; import com.boying.entity.*; 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; import ledshow.CodeUtil; import ledshow.LedBean; import ledshow.ResultData; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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; /** * Servlet implementation class PlateServlet */ @Controller @RequestMapping("/ffzf/car") @RequiredArgsConstructor public class PlateServlet3 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 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"; /** * 回复开闸 */ protected void open(HttpServletRequest request, HttpServletResponse response,String data) throws ServletException, IOException { response.setContentType("text/json"); PrintWriter out = response.getWriter(); String aa = "{" + "\"Response_AlarmInfoPlate\": {" + "\"info\":\"ok\"," + "\"is_pay\":\"true\"," + "\"serialData\" :[" + "{" + "\"serialChannel\":0," + "\"data\" : \"" + data + "\"," + "\"dataLen\" :" + data.length() + "}" + "]" + "}" + "}"; out.println(aa); 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,String data) throws IOException { response.setContentType("text/json"); PrintWriter out = response.getWriter(); String aa = "{" + "\"Response_AlarmInfoPlate\": {" + "\"serialData\" :[" + "{" + "\"serialChannel\":0," + "\"data\" : \"" + data + "\"," + "\"dataLen\" :" + data.length() + "}" + "]" + "}" + "}"; out.println(aa); 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.flush(); 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(); 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.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){ //待开闸 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){ String s= "2."+barrier.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."+barrier.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); } } barrier.setType2(0); barrier.setUpdateTime(LocalDateTime.now()); 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 { //不需开闸 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"; 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()); } } } 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); } } /** * @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 = ""; FileInfo fileInfo = null; 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 image = plateResult.get("imageFile").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; } if(StringUtils.isNotBlank(image)){ fileInfo = FileUtil.generateBase64StringToFile(image, 1,1); fileInfoService.save(fileInfo); } 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"; easyNoOpen(request,response); }else{ if(barrier.getType()==0){ outPark(license, barrier.getId(), barrier.getParkId(),request,response,fileInfo); 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显示 enterPark(license,barrier.getId(),barrier.getParkId(),fileInfo); inLedShow(code, license,barrier.getParkId(),request,response); s+=license+"-保存入场记录\n"; } } } writeTxt(s); }while(false); } catch (Exception e) { System.out.println("无入场记录"); s+=" ,查询场内记录异常"; writeTxt(s); easyNoOpen(request,response); } } /** * 手机号入场 * @param * @return */ @PostMapping("/inParkByPhone" ) @ResponseBody public Object inParkByPhone( EnterPark enterPark){ Barrier barrier = barrierService.getById(enterPark.getBarrierId()); if(barrier!=null){ 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() ){ return R.failed(null,"禁止通行,车位已满"); }else { QueryWrapper wrapper2 = new QueryWrapper<>(); wrapper2.lambda() .eq(EnterPark::getBarrierId,barrier.getId()) .orderByDesc(EnterPark::getCreateTime) .last(" limit 1"); EnterPark one = enterParkService.getOne(wrapper2); if(one == null){ return R.failed("未查询到车辆存在"); }else { if(one.getCarNo().equals("_无_") || one.getCarNo().equals("无牌车")){ enterPark.setCreateTime(LocalDateTime.now()); // QueryWrapper wrapper = new QueryWrapper<>(); // wrapper.lambda() // .eq(Ticket::getCarNo,enterPark.getCarNo()) // .eq(Ticket::getPayStatus,1); // List 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.save(enterPark); barrier.setType2(1); String jsonValue = JSON.toJSONString(barrier); redisTemplate.opsForValue().set("barrier-"+barrier.getCode(), jsonValue); return R.ok(); }else { return R.failed("非法操作"); } } } } return R.failed(null,"数据异常"); } /** * 手机号出场 * @param * @return */ @PostMapping("/outParkByPhone" ) @ResponseBody public Object outParkByPhone(String code2,String carNo){ Barrier byCode2 = barrierService.findByCode2(code2); QueryWrapper wrapper =new QueryWrapper<>(); wrapper.lambda() .eq(EnterPark::getParkId,byCode2.getParkId()) .eq(EnterPark::getCarNo,carNo); EnterPark one = enterParkService.getOne(wrapper); if(one != null){ double money = 0.0; String toDayHrMinSec = null; OutPark outPark = new OutPark(); outPark.setCarNo(carNo); outPark.setParkId(one.getParkId()); outPark.setBarrierId(byCode2.getId()); outPark.setCreateTime(LocalDateTime.now()); outPark.setCode(System.currentTimeMillis()+""); System.out.println("入场记录:"+one); outPark.setEnterTime(one.getCreateTime()); outPark.setParkName(byCode2.getName()); if(outPark.getTime() > 0){ outPark.setTimeStr(DateUtilOther.millisToDayHrMinSec(new Double(outPark.getTime()).longValue())); }else { outPark.setTimeStr("不足一分钟"); } try { long l = outPark.getCreateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli() - one.getCreateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli(); outPark.setTime(l/(1000*60)); toDayHrMinSec = DateUtilOther.millisToDayHrMinSec(l/(1000*60)); money = costRuleService.getMoney(one.getParkId(), outPark.getEnterTime(), outPark.getCreateTime(), 1); //入场记录保存一下 if(one.getIsPay()==1){ money = money - one.getPrice(); }else { one.setPrice(money); one.setIsPay(0); enterParkService.updateById(one); } } catch (ParseException e) { e.printStackTrace(); } outPark.setPrice(money); outPark.setStatus3(findTicket(carNo)); outParkService.saveOrUpdate(outPark); byCode2.setCarNo(carNo); //led展示 if(toDayHrMinSec == null){ return R.failed("异常记录"); } if(outPark.getPrice()==0&&outPark.getStatus3()==0){ System.out.println(outPark.getCarNo()+"该车不需要缴费"); String s= "1."+byCode2.getCarNo()+"该车不需要缴费\n"; writeTxt2(s); byCode2.setType2(1); barrierService.updateById(byCode2); return R.ok(outPark); }else { //需要缴费或者有违章 System.out.println(outPark.getCarNo()+"该车需要缴费"+outPark.getPrice()); String s= "1."+byCode2.getCarNo()+"该车需要缴费\n"; writeTxt2(s); barrierService.updateById(byCode2); return R.ok(outPark); } }else { return R.failed("未查询到入场记录"); } } 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("打印错误"); } } private void writeTxt2( String txt) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); try { FileWriter f = new FileWriter(systemConfigProperties.getLogPath()+sdf.format(new Date())+"LED.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,FileInfo fileInfo) { TicketBlack black = ticketBlackService.getByCarNo(carNo, 1); if(black != null){ System.out.println("黑名单车辆"+carNo); }else { enterParkService.deleteByCarNo(carNo,parkId); EnterPark enterPark = new EnterPark(); enterPark.setIsPay(0); enterPark.setPrice(0); enterPark.setCarNo(carNo); enterPark.setBarrierId(barrierId); enterPark.setParkId(parkId); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Ticket::getCarNo,enterPark.getCarNo()) .eq(Ticket::getPayStatus,1); List tickets = ticketService.list(wrapper); if(tickets.size()>0){ enterPark.setStatus(1);//发现有违章 } if(fileInfo != null){ enterPark.setImgId(fileInfo.getId()); } enterParkService.saveOrUpdate(enterPark); String jsonValue = JSON.toJSONString(enterPark); redisTemplate.opsForValue().set("enterPark_dif_"+ parkId, jsonValue); } } public double outPark(String carNo,Integer barrierId,Integer parkId,HttpServletRequest request, HttpServletResponse response,FileInfo fileInfo) throws ServletException, IOException { 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 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); //入场记录保存一下 if(enterPark.getIsPay() != null && enterPark.getIsPay()==1){ money = money - enterPark.getPrice(); }else { enterPark.setPrice(money); enterPark.setIsPay(0); enterParkService.updateById(enterPark); } } catch (ParseException e) { e.printStackTrace(); } } //outPark.setPrice(Double.valueOf(String.format("%.1f", money))); outPark.setPrice(money); outPark.setStatus3(findTicket(carNo)); if(fileInfo != null){ outPark.setImgId(fileInfo.getId()); } outParkService.saveOrUpdate(outPark); Barrier barrier =barrierService.getById(barrierId); barrier.setCarNo(carNo); //led展示 if(toDayHrMinSec == null){ toDayHrMinSec = "入场记录异常,请联系管理员"; } //判断是否在白名单 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(WhiteList::getCarNo,carNo); List all = whiteListService.list(wrapper); if(all.size() >0){ for(WhiteList w : all){ if(w.getType()==0){ outLedShowYueZu(barrier.getCarNo(),"月租车",parkId,request,response,0); OutPark byCarNoAndBarrierId = outParkService.findByCarNoAndBarrierId(carNo, barrierId); 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())){ 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() wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Ticket::getCarNo,carNo) .eq(Ticket::getPayStatus,1); List tickets = ticketService.list(wrapper); if(tickets.size()>0){ return 1; }else{ return 0; } } public void inLedShow(String ledId,String carNo,Integer parkId,HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { TicketBlack black = ticketBlackService.getByCarNo(carNo, 1); if(black != null){ LedBean ledBean = new LedBean(); ledBean.setcolor1(0); ledBean.setcolor2(0); ledBean.setcolor3(0); ledBean.setcolor4(0); ledBean.setcontent1(carNo); ledBean.setcontent2("黑名单车辆"); ledBean.setcontent3("禁止驶入"); ledBean.setcontent4("联系管理员"); ledBean.setdisMode1(0); ledBean.setdisMode2(0); ledBean.setdisMode3(0); ledBean.setdisMode4(0); ledBean.setvoiceContent("黑名单车辆"+carNo+",禁止驶入"); ResultData resultData = CodeUtil.GetResultDataAllLine(ledBean); byte[] dataX = new byte[resultData.getlenth()]; System.arraycopy(resultData.getdatas(),0,dataX,0,resultData.getlenth()); String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "="; data1 = data1.replaceAll("\r\n", ""); noOpen(request,response,data1); }else { String num = redisTemplate.opsForValue().get("car_park_" + parkId); if(num == null){ num = "0"; } Park byId = parkService.getById(parkId); int n = Integer.parseInt(num)+1; redisTemplate.opsForValue().set("car_park_" + parkId,Integer.toString(n),30, TimeUnit.DAYS); 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(StringUtils.isNotBlank(byCarNo.getParkIds()) && byCarNo.getParkIds().contains(barrier.getParkId()+"")){ carType = "月租车"; long l = (byCarNo.getEndTime().getTime() - byCarNo.getStartTime().getTime()) / (24 * 3600 * 1000); carDay = "有效期还有"+l+"天"; }else { carType = "临时车"; } } } if(StringUtils.isBlank(carDay) && !carNo.equals("_无_") && !carNo.equals("无牌车")){ carDay = "欢迎光临"; }else if(StringUtils.isBlank(carDay) || carNo.equals("_无_") || carNo.equals("无牌车")){ carDay = "拒绝驶入"; } LedBean ledBean = new LedBean(); ledBean.setcolor1(0); ledBean.setcolor2(0); ledBean.setcolor3(0); ledBean.setcolor4(0); ledBean.setcontent1(carNo); ledBean.setcontent2(carType); ledBean.setcontent3(carDay); ledBean.setcontent4("余位:"+i); ledBean.setdisMode1(0); ledBean.setdisMode2(0); ledBean.setdisMode3(0); ledBean.setdisMode4(0); ledBean.setvoiceContent(carType+","+carNo+","+carDay); ResultData resultData = CodeUtil.GetResultDataAllLine(ledBean); byte[] dataX = new byte[resultData.getlenth()]; System.arraycopy(resultData.getdatas(),0,dataX,0,resultData.getlenth()); String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "="; data1 = data1.replaceAll("\r\n", ""); if(!carNo.equals("_无_") && !carNo.equals("无牌车")){ open(request,response,data1);//入场开闸 }else { noOpen(request,response,data1); } } } public void inLedFullShow(String ledId, String carNo, Integer parkId,HttpServletRequest request, HttpServletResponse response) throws IOException { 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(StringUtils.isNotBlank(byCarNo.getParkIds()) && byCarNo.getParkIds().contains(barrier.getParkId()+"")){ carType = "月租车"; }else { carType = "临时车"; } } } LedBean ledBean = new LedBean(); ledBean.setcolor1(0); ledBean.setcolor2(0); ledBean.setcolor3(0); ledBean.setcolor4(0); ledBean.setcontent1(carNo); ledBean.setcontent2(carType); ledBean.setcontent3("车位已满"); ledBean.setcontent4("请驶离"); ledBean.setdisMode1(0); ledBean.setdisMode2(0); ledBean.setdisMode3(0); ledBean.setdisMode4(0); ledBean.setvoiceContent("车位已满,请驶离"); ResultData resultData = CodeUtil.GetResultDataAllLine(ledBean); byte[] dataX = new byte[resultData.getlenth()]; System.arraycopy(resultData.getdatas(),0,dataX,0,resultData.getlenth()); String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "="; data1 = data1.replaceAll("\r\n", ""); noOpen(request,response,data1);//入场开闸 } 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(); ledBean.setcolor1(0); ledBean.setcolor2(0); ledBean.setcolor3(0); ledBean.setcolor4(0); ledBean.setcontent1(carNo); ledBean.setcontent2("停车"+timeStamp); ledBean.setcontent3("交费"+price+"元"); ledBean.setcontent4("禁止闯杆"); ledBean.setdisMode1(0); ledBean.setdisMode2(1); ledBean.setdisMode3(1); ledBean.setdisMode4(0); ledBean.setvoiceContent(carNo+"停车"+timeStamp+"交费"+price+"元"); ResultData resultData = CodeUtil.GetResultDataAllLine(ledBean); byte[] dataX = new byte[resultData.getlenth()]; System.arraycopy(resultData.getdatas(),0,dataX,0,resultData.getlenth()); String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "="; data1 = data1.replaceAll("\r\n", ""); if(type == 0){ if(carNo.equals("_无_") || carNo.equals("无牌车")){ noOpen(request,response,data1); }else { if(timeStamp.contains("记录异常")){ 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); // } } } }else { noOpen(request,response,data1); } } public void outLedShowYueZu(String carNo,String text,Integer parkId,HttpServletRequest request, HttpServletResponse response,int type) throws ServletException, IOException{ String redisnum = redisTemplate.opsForValue().get("car_park_" + parkId); LedBean ledBean = new LedBean(); ledBean.setcolor1(0); ledBean.setcolor2(0); ledBean.setcolor3(0); ledBean.setcolor4(0); ledBean.setcontent1(carNo); ledBean.setcontent2(text); ledBean.setcontent3("减速慢行"); ledBean.setcontent4("欢迎下次光临"); ledBean.setdisMode1(0); ledBean.setdisMode2(0); ledBean.setdisMode3(0); ledBean.setdisMode4(1); ledBean.setvoiceContent(text+carNo+"欢迎下次光临"); ResultData resultData = CodeUtil.GetResultDataAllLine(ledBean); byte[] dataX = new byte[resultData.getlenth()]; System.arraycopy(resultData.getdatas(),0,dataX,0,resultData.getlenth()); String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "="; data1 = data1.replaceAll("\r\n", ""); 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--; 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); } } public void outLedShowDefault(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ LedBean ledBean = new LedBean(); ledBean.setcolor1(0); ledBean.setcolor2(0); ledBean.setcolor3(0); ledBean.setcolor4(0); ledBean.setcontent1("一车一杆"); ledBean.setcontent2("减速慢行"); ledBean.setcontent3("无需取卡"); ledBean.setcontent4("扫码缴费"); ledBean.setdisMode1(0); ledBean.setdisMode2(0); ledBean.setdisMode3(0); ledBean.setdisMode4(0); ledBean.setvoiceContent(""); ResultData resultData = CodeUtil.GetResultDataAllLine(ledBean); byte[] dataX = new byte[resultData.getlenth()]; System.arraycopy(resultData.getdatas(),0,dataX,0,resultData.getlenth()); String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "="; data1 = data1.replaceAll("\r\n", ""); noOpen(request,response,data1); } public void inLedShowDefault(Integer parkId,HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ String num = redisTemplate.opsForValue().get("car_park_" + parkId); String con3 = ""; String con4 = ""; if(num == null){ num = "0"; } Park byId = parkService.getById(parkId); int i = byId.getNum() - Integer.parseInt(num); if(i<=0){ i = 0; con3 = "车位已满"; con4 = "请驶离"; }else { con3 = "排队等候"; con4 = "余位:"+i; } LedBean ledBean = new LedBean(); ledBean.setcolor1(0); ledBean.setcolor2(0); ledBean.setcolor3(0); ledBean.setcolor4(0); ledBean.setcontent1("一车一杆"); ledBean.setcontent2("减速慢行"); ledBean.setcontent3(con3); ledBean.setcontent4(con4); ledBean.setdisMode1(0); ledBean.setdisMode2(0); ledBean.setdisMode3(0); ledBean.setdisMode4(0); ledBean.setvoiceContent(""); ResultData resultData = CodeUtil.GetResultDataAllLine(ledBean); byte[] dataX = new byte[resultData.getlenth()]; System.arraycopy(resultData.getdatas(),0,dataX,0,resultData.getlenth()); String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "="; data1 = data1.replaceAll("\r\n", ""); noOpen(request,response,data1); } }