kongdeqiang
2024-09-26 7156119e51320afd0ffdd0723cd983fd415d61d9
src/main/java/com/boying/controller/BarrierController.java
@@ -2,14 +2,19 @@
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.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;
@@ -19,20 +24,25 @@
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")
@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 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 +50,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>25000){
            long between = ChronoUnit.SECONDS.between(barrier.getUpdateTime(), LocalDateTime.now());
            if(between>121){
                barrier.setStatus(1);
            }
        }
@@ -51,6 +60,7 @@
    }
    @PostMapping("save")
    @Operation(summary = "新增道闸" , description = "新增道闸" )
    public Object save(Barrier barrier) {
        barrier.setUpdateTime(LocalDateTime.now());
        barrierService.saveOrUpdate(barrier);
@@ -64,6 +74,7 @@
    }
    @PostMapping("delete")
    @Operation(summary = "删除道闸" , description = "删除道闸" )
    public Object delete(Integer id) {
        Barrier byId = barrierService.getById(id);
        barrierService.removeById(id);
@@ -72,6 +83,7 @@
    }
    @PostMapping("findAll")
    @Operation(summary = "查询所有道闸(APP)" , description = "查询所有道闸(APP)" )
    public Object findAll(Long parkId) {
        if (parkId==null) {
            return R.failed("未发现该停车场");
@@ -83,6 +95,7 @@
    }
    @PostMapping("open")
    @Operation(summary = "手动开闸(废弃)" , description = "手动开闸(废弃)" )
    public Object open(Long barrierId) {
        Barrier b=  barrierService.getById(barrierId);
        if (b==null) {
@@ -101,6 +114,7 @@
    }
    @PostMapping("getByCode")
    @Operation(summary = "根据code查询道闸" , description = "根据code查询道闸" )
    public Object getByCode(String code) {
        Barrier b=  barrierService.findByCode2(code);
        if (b==null) {
@@ -113,7 +127,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 +142,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 +169,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 +187,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 +201,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);
    }
}