kongdeqiang
2023-03-01 29082c356872abc0c1208e8b4870d1ba1fa7afe7
增加属性
5个文件已修改
1个文件已添加
905 ■■■■■ 已修改文件
src/main/java/com/boying/controller/car/PlateServlet2.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/controller/car/PlateServlet3.java 725 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/entity/LedShow.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/entity/led/LedBean.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/entity/led/ResultData.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/util/StringUtil.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/controller/car/PlateServlet2.java
@@ -11,9 +11,11 @@
import com.boying.entity.led.ResultData;
import com.boying.service.*;
import com.boying.util.DateUtilOther;
import com.boying.util.StringUtil;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.sun.media.jfxmedia.track.Track;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
@@ -24,7 +26,9 @@
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sound.sampled.AudioFormat;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
@@ -51,7 +55,7 @@
    private final TicketService ticketService;
    private final CostRuleService costRuleService;
    private final WhiteListService whiteListService;
    private final String LEDURL = "http://localhost:9988/LedShow/IGetResultDataAllLine";
    private final String LEDURL = "http://192.168.31.212:9988/LedShow/IGetResultDataAllLine";
    /**
     * 回复开闸
@@ -498,12 +502,22 @@
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        byte[] dataX = new byte[resultData.getLength()];
        System.arraycopy(resultData.getDatas(),0,dataX,0,resultData.getLength());
        String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "=";
        data1 = data1.replaceAll("\r\n", "");
        open(request,response,data1);//入场开闸
        String[] split = resultData.getDatas().split("-");
        String[] dataX = new String[resultData.getLenth()];
        System.arraycopy(split,0,dataX,0,resultData.getLenth());
        String s2 = StringUtil.toStr(dataX);
        byte[] bytes = StringUtil.HexString2Bytes(s2);
        for (byte aByte : bytes) {
            System.out.print(aByte+" ");
        }
        System.out.println();
        String data1 = new String("gb2312");
        data1 = Base64.getMimeEncoder().encodeToString(bytes);
       // String data2 = data1.replace("\n", "");
        String data3  = data1.replaceAll("\r\n", "");
        System.out.println();
        System.out.println(data3);
        open(request,response,data3);//入场开闸
    }
    public void inLedFullShow(String ledId, String carNo, Integer parkId,HttpServletRequest request, HttpServletResponse response) throws IOException {
@@ -548,8 +562,8 @@
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        byte[] dataX = new byte[resultData.getLength()];
        System.arraycopy(resultData.getDatas(),0,dataX,0,resultData.getLength());
        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", "");
@@ -579,8 +593,8 @@
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        byte[] dataX = new byte[resultData.getLength()];
        System.arraycopy(resultData.getDatas(),0,dataX,0,resultData.getLength());
        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){
@@ -624,8 +638,8 @@
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        byte[] dataX = new byte[resultData.getLength()];
        System.arraycopy(resultData.getDatas(),0,dataX,0,resultData.getLength());
        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){
@@ -667,8 +681,8 @@
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        byte[] dataX = new byte[resultData.getLength()];
        System.arraycopy(resultData.getDatas(),0,dataX,0,resultData.getLength());
        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);
@@ -705,8 +719,8 @@
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        byte[] dataX = new byte[resultData.getLength()];
        System.arraycopy(resultData.getDatas(),0,dataX,0,resultData.getLength());
        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);
src/main/java/com/boying/controller/car/PlateServlet3.java
New file
@@ -0,0 +1,725 @@
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.StringUtils;
import com.boying.common.SystemConfigProperties;
import com.boying.entity.*;
import com.boying.entity.led.LedBean;
import com.boying.entity.led.ResultData;
import com.boying.service.*;
import com.boying.util.DateUtilOther;
import com.boying.util.StringUtil;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import lombok.RequiredArgsConstructor;
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 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.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("/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 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();
    }
    @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(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){
                        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());
                barrier.setStatus(0);
                barrier.setUpdateTime(LocalDateTime.now());
                barrierService.saveOrUpdate(barrier);
                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);
                        }
                    }
                    outPark.setStatus2(1);
                    outParkService.saveOrUpdate(outPark);
                    easyOpen(request,response);
                }
                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);
                    }
                }
            }
        }
    }
    /**
     * @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(),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";
                        }
                    }
                }
                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,HttpServletRequest request, HttpServletResponse response) 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<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){
                    outLedShowYueZu(barrier.getCarNo(),"月租车",parkId,request,response,0);
                    OutPark byCarNoAndBarrierId = outParkService.findByCarNoAndBarrierId(carNo, barrierId);
                    byCarNoAndBarrierId.setStatus(1);
                    byCarNoAndBarrierId.setStatus2(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()){
                                    outLedShowYueZu(barrier.getCarNo(),"月租车",parkId,request,response,0);
                                    OutPark byCarNoAndBarrierId = outParkService.findByCarNoAndBarrierId(carNo, barrierId);
                                    byCarNoAndBarrierId.setStatus(1);
                                    byCarNoAndBarrierId.setStatus2(1);
                                    outParkService.saveOrUpdate(byCarNoAndBarrierId);
                                    return 0.0;
                                }
                            }
                        }
                    }
                }
            }
        }
        if(outPark.getPrice()==0&&outPark.getStatus3()==0){
            System.out.println(outPark.getCarNo()+"该车不需要缴费");
            outLedShow(barrier.getCode(),barrier.getCarNo(),outPark.getPrice(),toDayHrMinSec,barrier.getParkId(),request,response,0);
        }else {
            //需要缴费或者有违章
            System.out.println(outPark.getCarNo()+"该车需要缴费"+outPark.getPrice());
            outLedShow(barrier.getCode(),barrier.getCarNo(),outPark.getPrice(),toDayHrMinSec,barrier.getParkId(),request,response,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 void inLedShow(String ledId,String carNo,Integer parkId,HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        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(byCarNo.getParkId().equals(barrier.getParkId())){
                    carType = "月租车";
                    long l = (byCarNo.getEndTime().getTime() - byCarNo.getStartTime().getTime()) / (24 * 3600 * 1000);
                    carDay = "有效期还有"+l+"天";
                }
            }
        }
        if(StringUtils.isBlank(carDay)){
            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(1);
        ledBean.setDisMode2(1);
        ledBean.setDisMode3(1);
        ledBean.setDisMode4(1);
        ledBean.setVoiceContent(carType+","+carNo+","+carDay);
        String s = JSON.toJSONString(ledBean);
        String s1= HttpRequest.post(LEDURL)
                .timeout(5000)
                .body(s)
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        String[] split = resultData.getDatas().split("-");
        String[] dataX = new String[resultData.getLenth()];
        System.arraycopy(split,0,dataX,0,resultData.getLenth());
        String s2 = StringUtil.toStr(dataX);
        byte[] bytes = StringUtil.HexString2Bytes(s2);
        for (byte aByte : bytes) {
            System.out.print(aByte+" ");
        }
        System.out.println();
        String data1 = new String("gb2312");
        data1 = Base64.getMimeEncoder().encodeToString(bytes);
       // String data2 = data1.replace("\n", "");
        String data3  = data1.replaceAll("\r\n", "");
        System.out.println();
        System.out.println(data3);
        open(request,response,data3);//入场开闸
    }
    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(byCarNo.getParkId().equals(barrier.getParkId())){
                    carType = "月租车";
                    long l = (byCarNo.getEndTime().getTime() - byCarNo.getStartTime().getTime()) / (24 * 3600 * 1000);
                    carDay = "有效期还有"+l+"天";
                }
            }
        }
        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(1);
        ledBean.setDisMode2(1);
        ledBean.setDisMode3(1);
        ledBean.setDisMode4(1);
        ledBean.setVoiceContent("车位已满,请驶离");
        String s = JSON.toJSONString(ledBean);
        String s1= HttpRequest.post(LEDURL)
                .timeout(5000)
                .body(s)
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        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(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);
        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(1);
        ledBean.setDisMode2(1);
        ledBean.setDisMode3(1);
        ledBean.setDisMode4(1);
        ledBean.setVoiceContent(carNo+"停车"+timeStamp+"交费"+price+"元");
        String s = JSON.toJSONString(ledBean);
        String s1= HttpRequest.post(LEDURL)
                .timeout(5000)
                .body(s)
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        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);
            int i = Integer.parseInt(redisnum);
            i--;
            if(i<0){
                redisTemplate.opsForValue().set("car_park_" + parkId,"0",30, TimeUnit.DAYS);
                redisTemplate.opsForValue().set("park_up_" + parkId,"true",30, TimeUnit.DAYS);
            }else {
                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(1);
        ledBean.setDisMode2(1);
        ledBean.setDisMode3(1);
        ledBean.setDisMode4(1);
        ledBean.setVoiceContent(text+carNo+"欢迎下次光临");
        String s = JSON.toJSONString(ledBean);
        String s1= HttpRequest.post(LEDURL)
                .timeout(5000)
                .body(s)
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        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);
            int i = Integer.parseInt(redisnum);
            i--;
            if(i<0){
                redisTemplate.opsForValue().set("car_park_" + parkId,"0",30, TimeUnit.DAYS);
                redisTemplate.opsForValue().set("park_up_" + parkId,"true",30, TimeUnit.DAYS);
            }else {
                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(1);
        ledBean.setDisMode2(1);
        ledBean.setDisMode3(1);
        ledBean.setDisMode4(1);
        ledBean.setVoiceContent("");
        String s = JSON.toJSONString(ledBean);
        String s1= HttpRequest.post(LEDURL)
                .timeout(5000)
                .body(s)
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        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);
        if(num == null){
            num = "0";
        }
        Park byId = parkService.getById(parkId);
        int i = byId.getNum() - Integer.parseInt(num);
        if(i<0){
            i = 0;
        }
        LedBean ledBean = new LedBean();
        ledBean.setColor1(0);
        ledBean.setColor2(0);
        ledBean.setColor3(0);
        ledBean.setColor4(0);
        ledBean.setContent1("一车一杆");
        ledBean.setContent2("减速慢行");
        ledBean.setContent3("排队等候");
        ledBean.setContent4("余位:"+i);
        ledBean.setDisMode1(1);
        ledBean.setDisMode2(1);
        ledBean.setDisMode3(1);
        ledBean.setDisMode4(1);
        ledBean.setVoiceContent("");
        String s = JSON.toJSONString(ledBean);
        String s1= HttpRequest.post(LEDURL)
                .timeout(5000)
                .body(s)
                .execute()
                .body();
        ResultData resultData = JSON.parseObject(s1,ResultData.class);
        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);
    }
}
src/main/java/com/boying/entity/LedShow.java
@@ -26,11 +26,11 @@
    @ApiModelProperty(value = "道闸序列号")
    @Column(columnDefinition = "varchar(100) comment '道闸序列号'")
    private String ledId;
    private String ledId ;
    @ApiModelProperty(value = "名称")
    @Column(columnDefinition = "varchar(100) comment '名称'")
    private String name;
    private String name ;
    @ApiModelProperty(value = "类型")
    @Column(columnDefinition = "int comment '类型 0/led  1/语音  2/同时'")
@@ -42,7 +42,7 @@
    @ApiModelProperty(value = "密码")
    @Column(columnDefinition = "varchar(100) comment '密码'")
    private String password;
    private String password = "123";
    @ApiModelProperty(value = "状态")
    @Column(columnDefinition = "int comment '状态 0/不变化 1/变化'")
@@ -50,7 +50,7 @@
    @ApiModelProperty(value = "下发指令时间")
    @Column(columnDefinition = "varchar(100) comment '下发指令时间'")
    private String timeStamp;
    private String timeStamp = "123";
    @ApiModelProperty(value = "第一行颜色")
    @Column(columnDefinition = "int comment '第一行颜色'")
@@ -122,7 +122,7 @@
    @ApiModelProperty(value = "ip地址")
    @Column(columnDefinition = "varchar(200) comment 'ip地址'")
    private String ipAddress;
    private String ipAddress = "123";
    @ApiModelProperty(value = "端口")
    @Column(columnDefinition = "int comment '端口'")
src/main/java/com/boying/entity/led/LedBean.java
@@ -14,19 +14,19 @@
 */
@Data
public class LedBean {
    private int id;
    private String ledId;
    private String name;
    private String ipAddress;
    private int port;
    private int isDefault;
    private int type;
    private String password;
    private int id = 1;
    private String ledId = "led";
    private String name = "123";
    private String ipAddress = "led";
    private int port = 1;
    private int isDefault =1;
    private int type =1;
    private String password = "led";
    @ApiModelProperty(value = "状态")
    private Integer status;
    private Integer status = 1;
    @ApiModelProperty(value = "下发指令时间")
    private String timeStamp;
    private String timeStamp = "led";
    @ApiModelProperty(value = "第一行颜色")
    private Integer color1;
src/main/java/com/boying/entity/led/ResultData.java
@@ -11,6 +11,6 @@
 */
@Data
public class ResultData {
    private int length;
    private byte[] datas;
    private int lenth;
    private String datas;
}
src/main/java/com/boying/util/StringUtil.java
@@ -1,5 +1,6 @@
package com.boying.util;
import java.util.Arrays;
import java.util.UUID;
public class StringUtil {
@@ -11,8 +12,105 @@
        }
        return false;
    }
    public static byte[] convertNum(String s){
        String[] split = s.split("-");
        byte[] bytes = new byte[split.length];
        for (int i = 0; i < split.length; i++) {
            String s1 = split[i];
            byte b = Byte.parseByte("0x"+s1);
            bytes[i]=b;
        }
        return bytes;
    }
    public static String toStr(String[] strs){
        String s = Arrays.toString(strs);
        String substring = s.substring(1, s.length() - 1);
        String s1 = substring.replaceAll(",", "");
        String s2 = s1.replaceAll(" ", "");
        return s2;
    }
    public static String getUUID() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }
    /**
     * 将指定byte数组以16进制的形式打印到控制台
     *
     * @param hint String
     * @param b    byte[]
     * @return void
     */
    public static void printHexString(String hint, byte[] b) {
        System.out.print(hint);
        for (int i = 0; i < b.length; i++) {
            String hex = Integer.toHexString(b[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            System.out.print(hex.toUpperCase() + " ");
        }
        System.out.println("");
    }
    /**
     * @param b byte[]
     * @return String
     */
    public static String Bytes2HexString(byte[] b) {
        String ret = "";
        for (int i = 0; i < b.length; i++) {
            String hex = Integer.toHexString(b[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            ret += " 0x" + hex.toUpperCase();
        }
        return ret;
    }
    /**
     * 将指定字符串src,以每两个字符分割转换为16进制形式 如:"2B44EFD9" –> byte[]{0x2B, 0×44, 0xEF,
     * 0xD9}
     *
     * @param src String
     * @return byte[]
     */
    public static byte[] HexString2Bytes(String src) {
        if (null == src || 0 == src.length()) {
            return null;
        }
        String s1 = src.replaceAll("-", "");
        byte[] ret = new byte[s1.length() / 2];
        byte[] tmp = s1.getBytes();
        for (int i = 0; i < (tmp.length / 2); i++) {
            ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
        }
        return ret;
    }
    /**
     * 将两个ASCII字符合成一个字节; 如:"EF"–> 0xEF
     *
     * @param src0 byte
     * @param src1 byte
     * @return byte
     */
    public static byte uniteBytes(byte src0, byte src1) {
        byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue();
        _b0 = (byte) (_b0 << 4);
        byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue();
        byte ret = (byte) (_b0 ^ _b1);
        return ret;
    }
    public static void main(String[] args) {
        String s = "00-64-FF-FF-6E-78-00-04-00-01-01-02-00-FF-00-00-00-09-E4-BA-AC-41-38-38-38-38-38-0D-01-01-01-02-00-FF-00-00-00-09-E4-B8-B4-E6-97-B6-E8-BD-A6-0D-02-01-01-02-00-FF-00-00-00-0C-E6-AC-A2-E8-BF-8E-E5-85-89-E4-B8-B4-0D-03-01-01-02-00-FF-00-00-00-09-E4-BD-99-E4-BD-8D-3A-37-34-00-0A-20-E4-B8-B4-E6-97-B6-E8-BD-A6-2C-E4-BA-AC-41-38-38-38-38-38-2C-E6-AC-A2-E8-BF-8E-E5-85-89-E4-B8-B4-00-6B-E7";
        String s1 = s.replaceAll("-", "");
        byte[] bytes = HexString2Bytes(s1);
        for (byte aByte : bytes) {
            System.out.print(aByte + " ");
        }
    }
}