kongdeqiang
2023-06-08 59bec7db0e4bd0e1ad2491d797aea4e78634c40d
src/main/java/com/boying/controller/car/PlateServlet3.java
@@ -5,10 +5,12 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.StringUtil;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@@ -20,6 +22,7 @@
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;
@@ -35,11 +38,12 @@
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * Servlet implementation class PlateServlet
 */
@Controller
@RequestMapping("/car")
@RequestMapping("/ffzf/car")
@RequiredArgsConstructor
public class PlateServlet3 extends HttpServlet {
    private static final long serialVersionUID = 1L;
@@ -52,6 +56,7 @@
    private final TicketService ticketService;
    private final CostRuleService costRuleService;
    private final WhiteListService whiteListService;
    private final FileInfoService fileInfoService;
    private final String LEDURL = "http://192.168.31.212:9988/LedShow/IGetResultDataAllLine";
    /**
@@ -216,16 +221,18 @@
        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);
       // 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 {
@@ -261,7 +268,14 @@
                    break;
                }
                System.out.println("编号:"+serialno+"设备识别到了:"+license);
                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+"  ";
@@ -272,7 +286,7 @@
                    easyNoOpen(request,response);
                }else{
                    if(barrier.getType()==0){
                        outPark(license, barrier.getId(), barrier.getParkId(),request,response);
                        outPark(license, barrier.getId(), barrier.getParkId(),request,response,fileInfo);
                        s+=license+"-保存出场记录\n";
                    }else{
                        String num = redisTemplate.opsForValue().get("car_park_" +  barrier.getParkId());
@@ -288,7 +302,7 @@
                        }else {
                            //led显示
                            inLedShow(code, license,barrier.getParkId(),request,response);
                            enterPark(license,barrier.getId(),barrier.getParkId());
                            enterPark(license,barrier.getId(),barrier.getParkId(),fileInfo);
                            s+=license+"-保存入场记录\n";
                        }
                    }
@@ -301,6 +315,127 @@
            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<EnterPark> 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("无牌车")){
                        enterPark.setCreateTime(LocalDateTime.now());
                        QueryWrapper<Ticket> wrapper = new QueryWrapper<>();
                        wrapper.lambda()
                                .eq(Ticket::getCarNo,enterPark.getCarNo())
                                .eq(Ticket::getPayStatus,1);
                        List<Ticket> tickets = ticketService.list(wrapper);
                        if(tickets.size()>0){
                            enterPark.setStatus(1);//发现有违章
                        }
                        enterParkService.deleteByCarNo(enterPark.getCarNo(),enterPark.getParkId());
                        enterParkService.save(enterPark);
                        barrier.setType2(1);
                        barrierService.updateById(barrier);
                        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<EnterPark> 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);
            } 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("未查询到入场记录");
        }
    }
@@ -342,7 +477,7 @@
    public void enterPark(String carNo,Integer barrierId,Integer parkId) {
    public void enterPark(String carNo,Integer barrierId,Integer parkId,FileInfo fileInfo) {
        Park park = parkService.getById(parkId);
//        int num = 0;
//        String s = redisTemplate.opsForValue().get("car_park_" + parkId);
@@ -373,6 +508,9 @@
        if(tickets.size()>0){
            enterPark.setStatus(1);//发现有违章
        }
        if(fileInfo != null){
            enterPark.setImgId(fileInfo.getId());
        }
        enterParkService.saveOrUpdate(enterPark);
//        Barrier barrier = barrierService.getById(barrierId);
@@ -380,7 +518,7 @@
//        barrierService.saveOrUpdate(barrier);
    }
    public double outPark(String carNo,Integer barrierId,Integer parkId,HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    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;
@@ -411,6 +549,9 @@
        //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);
@@ -516,8 +657,10 @@
                }
            }
        }
        if(StringUtils.isBlank(carDay)){
        if(StringUtils.isBlank(carDay) && !carNo.equals("无车牌")){
            carDay = "欢迎光临";
        }else if(StringUtils.isBlank(carDay) && carNo.equals("无车牌")){
            carDay = "拒绝驶入";
        }
        LedBean ledBean = new LedBean();
@@ -540,7 +683,12 @@
        String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "=";
        data1 = data1.replaceAll("\r\n", "");
        open(request,response,data1);//入场开闸
        if(!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 {
@@ -610,21 +758,25 @@
        String data1 = Base64.getMimeEncoder().encodeToString(dataX) + "=";
        data1 = data1.replaceAll("\r\n", "");
        if(type == 0){
            //开闸
            open(request,response,data1);
            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);
            if(carNo.equals("无车牌")){
                noOpen(request,response,data1);
            }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);
                //开闸
                open(request,response,data1);
                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);