package com.boying.controller; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.boying.common.R; import com.boying.entity.Barrier; import com.boying.entity.BarrierOpenLog; import com.boying.entity.OutPark; import com.boying.service.BarrierOpenLogService; import com.boying.service.BarrierService; import com.boying.service.OutParkService; import com.boying.service.ParkService; import com.boying.util.RedisJsonUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.List; @RestController @RequestMapping("ffzf/barrier") @RequiredArgsConstructor @Tag(description = "ffzf/barrier" , name = "道闸接口" ) public class BarrierController { private final BarrierService barrierService; private final BarrierOpenLogService barrierOpenLogService; private final OutParkService outParkService; private final ParkService parkService; private final StringRedisTemplate redisTemplate; @PostMapping("findPage") @Operation(summary = "根据停车场分页查询道闸" , description = "根据停车场分页查询道闸" ) public Object findPage(Page page, String parkId) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Barrier::getParkId,Integer.parseInt(parkId)); Page page1 = barrierService.page(page, wrapper); List records = page1.getRecords(); for(Barrier barrier:records){ long between = ChronoUnit.SECONDS.between(barrier.getUpdateTime(), LocalDateTime.now()); if(between>121){ barrier.setStatus(1); } } page1.setRecords(records); return R.ok(page1); } @PostMapping("save") @Operation(summary = "新增道闸" , description = "新增道闸" ) public Object save(Barrier barrier) { barrier.setUpdateTime(LocalDateTime.now()); barrierService.saveOrUpdate(barrier); try { String jsonValue = JSON.toJSONString(barrier); redisTemplate.opsForValue().set("barrier-"+barrier.getCode(), jsonValue); } catch (Exception e) { e.printStackTrace(); } return R.ok("保存成功"); } @PostMapping("delete") @Operation(summary = "删除道闸" , description = "删除道闸" ) public Object delete(Integer id) { Barrier byId = barrierService.getById(id); barrierService.removeById(id); redisTemplate.delete("barrier-"+byId.getCode()); return R.ok("删除成功"); } @PostMapping("findAll") @Operation(summary = "查询所有道闸(APP)" , description = "查询所有道闸(APP)" ) public Object findAll(Long parkId) { if (parkId==null) { return R.failed("未发现该停车场"); } QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Barrier::getParkId,parkId); return R.ok(barrierService.list(wrapper)); } @PostMapping("open") @Operation(summary = "手动开闸(废弃)" , description = "手动开闸(废弃)" ) public Object open(Long barrierId) { Barrier b= barrierService.getById(barrierId); if (b==null) { return R.failed("未找到该道闸"); } b.setType2(1); b.setUpdateTime(LocalDateTime.now()); barrierService.saveOrUpdate(b); try { String jsonValue = JSON.toJSONString(b); redisTemplate.opsForValue().set("barrier-"+b.getCode(), jsonValue); } catch (Exception e) { e.printStackTrace(); } return R.ok("请求成功"); } @PostMapping("getByCode") @Operation(summary = "根据code查询道闸" , description = "根据code查询道闸" ) public Object getByCode(String code) { Barrier b= barrierService.findByCode2(code); if (b==null) { return R.failed("未找到该道闸"); } b.setParkName(parkService.getById(b.getParkId()).getName()); return R.ok(b,"请求成功"); } @PostMapping("openBarrier") @Operation(summary = "手持手动开闸" , description = "手持手动开闸" ) public Object openBarrier(Long barrierId,Integer type,String carNo,String remark) { Barrier b= barrierService.getById(barrierId); if (b==null) { return R.failed("未找到该道闸"); }else { if(b.getType() == 1){ System.out.println("手动开入口闸"); //入口闸,直接开启 b.setType2(1); b.setUpdateTime(LocalDateTime.now()); barrierService.saveOrUpdate(b); try { String jsonValue = JSON.toJSONString(b); redisTemplate.opsForValue().set("barrier-"+b.getCode(), jsonValue); BarrierOpenLog barrierOpenLog = new BarrierOpenLog(); barrierOpenLog.setCarNo(carNo); barrierOpenLog.setRemark(remark); barrierOpenLog.setParkId(b.getParkId()); barrierOpenLog.setType(b.getType()); barrierOpenLogService.save(barrierOpenLog); } catch (Exception e) { e.printStackTrace(); } return R.ok("请求成功"); }else { System.out.println("手动开出口闸"); //出口闸,判断状态 if(type == null || type == 0){ //取消计费 OutPark outPark = outParkService.findByCarNoAndBarrierId(b.getCarNo(), b.getId()); if(outPark != null){ outPark.setPrice(0); outPark.setUpdateTime(LocalDateTime.now()); outParkService.saveOrUpdate(outPark); } b.setType2(1); b.setUpdateTime(LocalDateTime.now()); barrierService.saveOrUpdate(b); try { String jsonValue = JSON.toJSONString(b); redisTemplate.opsForValue().set("barrier-"+b.getCode(), jsonValue); BarrierOpenLog barrierOpenLog = new BarrierOpenLog(); barrierOpenLog.setCarNo(carNo); barrierOpenLog.setRemark(remark); barrierOpenLog.setParkId(b.getParkId()); barrierOpenLog.setType(b.getType()); barrierOpenLogService.save(barrierOpenLog); } catch (Exception e) { e.printStackTrace(); } return R.ok("请求成功"); }else { //计费 b.setType2(1); b.setUpdateTime(LocalDateTime.now()); barrierService.saveOrUpdate(b); try { String jsonValue = JSON.toJSONString(b); redisTemplate.opsForValue().set("barrier-"+b.getCode(), jsonValue); BarrierOpenLog barrierOpenLog = new BarrierOpenLog(); barrierOpenLog.setCarNo(carNo); barrierOpenLog.setRemark(remark); barrierOpenLog.setParkId(b.getParkId()); barrierOpenLog.setType(b.getType()); barrierOpenLogService.save(barrierOpenLog); } catch (Exception e) { e.printStackTrace(); } return R.ok("请求成功"); } } } } }