kongdeqiang
2024-12-04 80cacfd0dcee0174f2a8d9ae322a2fcf857cef63
src/main/java/com/boying/controller/BarrierController.java
@@ -2,14 +2,18 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
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.annotations.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
@@ -19,7 +23,9 @@
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.List;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@RestController
@RequestMapping("ffzf/barrier")
@@ -27,12 +33,14 @@
public class BarrierController {
    private final BarrierService barrierService;
    private final BarrierOpenLogService barrierOpenLogService;
    private final OutParkService outParkService;
    private final ParkService parkService;
    private StringRedisTemplate redisTemplate;
    private final StringRedisTemplate redisTemplate;
    @PostMapping("findPage")
   // @Operation(summary = "根据停车场分页查询道闸" , description = "根据停车场分页查询道闸" )
    public Object findPage(Page page, String parkId) {
        QueryWrapper<Barrier> wrapper = new QueryWrapper<>();
        wrapper.lambda()
@@ -40,9 +48,8 @@
        Page page1 = barrierService.page(page, wrapper);
        List<Barrier> records = page1.getRecords();
        for(Barrier barrier:records){
            long l = System.currentTimeMillis() - barrier.getUpdateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli();
            System.out.println(l);
            if(l>20000){
            long between = ChronoUnit.SECONDS.between(barrier.getUpdateTime(), LocalDateTime.now());
            if(between>121){
                barrier.setStatus(1);
            }
        }
@@ -51,6 +58,7 @@
    }
    @PostMapping("save")
   // @Operation(summary = "新增道闸" , description = "新增道闸" )
    public Object save(Barrier barrier) {
        barrier.setUpdateTime(LocalDateTime.now());
        barrierService.saveOrUpdate(barrier);
@@ -64,6 +72,7 @@
    }
    @PostMapping("delete")
    //@Operation(summary = "删除道闸" , description = "删除道闸" )
    public Object delete(Integer id) {
        Barrier byId = barrierService.getById(id);
        barrierService.removeById(id);
@@ -72,6 +81,7 @@
    }
    @PostMapping("findAll")
    //@Operation(summary = "查询所有道闸(APP)" , description = "查询所有道闸(APP)" )
    public Object findAll(Long parkId) {
        if (parkId==null) {
            return R.failed("未发现该停车场");
@@ -83,6 +93,7 @@
    }
    @PostMapping("open")
   // @Operation(summary = "手动开闸(废弃)" , description = "手动开闸(废弃)" )
    public Object open(Long barrierId) {
        Barrier b=  barrierService.getById(barrierId);
        if (b==null) {
@@ -101,6 +112,7 @@
    }
    @PostMapping("getByCode")
   // @Operation(summary = "根据code查询道闸" , description = "根据code查询道闸" )
    public Object getByCode(String code) {
        Barrier b=  barrierService.findByCode2(code);
        if (b==null) {
@@ -113,7 +125,8 @@
    @PostMapping("openBarrier")
    public Object openBarrier(Long barrierId,Integer type) {
   // @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("未找到该道闸");
@@ -127,6 +140,12 @@
               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();
               }
@@ -148,6 +167,12 @@
                   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();
                   }
@@ -160,6 +185,12 @@
                   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();
                   }
@@ -168,4 +199,33 @@
           }
        }
    }
    @PostMapping("getDisConnect")
    //@Operation(summary = "设备掉线通知" , description = "设备掉线通知" )
    public Object getDisConnect() {
        List<Map<String,Object>> resultlist = new ArrayList<>();
        String barrierCodeAll = redisTemplate.opsForValue().get("barrierCode_all");
        if(StringUtils.isBlank(barrierCodeAll)){
            QueryWrapper<Barrier> wrapper = new QueryWrapper<>();
            wrapper.select(" code ");
            List<Barrier> list = barrierService.list(wrapper);
            String collect = list.stream().map(Barrier::getCode).collect(Collectors.joining(","));
            redisTemplate.opsForValue().set("barrierCode_all",collect);
            barrierCodeAll = collect;
        }
        for (String s : barrierCodeAll.split(",")) {
            Barrier barrier = barrierService.findByCode(s);
            long between = ChronoUnit.SECONDS.between(barrier.getUpdateTime(), LocalDateTime.now());
            if(between>121){
                Map<String,Object> map = new HashMap<>();
                map.put("parkName",parkService.getOneById(barrier.getParkId()).getName());
                map.put("type",barrier.getType()==0?"出口":"入口");
                map.put("downTime",barrier.getUpdateTime());
                resultlist.add(map);
            }
        }
        Collections.sort(resultlist, (m1, m2)-> String.valueOf(m2.get("downTime")).compareTo(String.valueOf(m1.get("downTime")))); // lamuda排序
        return R.ok(resultlist);
    }
}