package com.boying.service.impl; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.boying.entity.Barrier; import com.boying.entity.EnterPark; import com.boying.entity.OutPark; import com.boying.entity.Park; import com.boying.mapper.BarrierMapper; import com.boying.mapper.EnterParkMapper; import com.boying.mapper.OutParkMapper; import com.boying.mapper.ParkMapper; import com.boying.service.BarrierService; import com.boying.service.EnterParkService; import com.boying.util.RedisJsonUtil; import com.boying.util.StringUtil; import lombok.AllArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import java.io.IOException; import java.time.ZoneId; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; /** * @author kdq * @version 1.0.0 * @ClassName BarrierServiceImpl.java * @Description TODO * @createTime 2022年11月20日 22:25:00 */ @Service @AllArgsConstructor public class BarrierServiceImpl extends ServiceImpl implements BarrierService { private EnterParkMapper enterParkMapper; private OutParkMapper outParkMapper; private StringRedisTemplate redisTemplate; private ParkMapper parkMapper; @Override public Barrier findByCode(String code) { // Barrier barrier = null; // try { // String s = redisTemplate.opsForValue().get("barrier-"+code); // if(!StringUtil.isNullOrEmpty(s)){ // barrier = JSON.parseObject(s, Barrier.class); // return barrier; // }else { // QueryWrapper wrapper = new QueryWrapper<>(); // wrapper.lambda() // .eq(Barrier::getCode,code); // List list = list(wrapper); // if(list.size()>0){ // String jsonValue = JSON.toJSONString(list.get(0)); // redisTemplate.opsForValue().set("barrier-"+code, jsonValue); // return list.get(0); // } // } // } catch (Exception e) { // e.printStackTrace(); // return null; // } // return null; QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Barrier::getCode,code); List list = list(wrapper); if(list.size()>0){ return list.get(0); }else { return null; } } @Override public Barrier findByCode2(String code) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Barrier::getCode2,code); List list = list(wrapper); if(list.size()>0){ return list.get(0); }else { return null; } } @Override public boolean getDateDifIn(Integer barrierId) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(EnterPark::getBarrierId,barrierId) .orderByDesc(EnterPark::getId) .last(" limit 1"); EnterPark enterPark = enterParkMapper.selectOne(wrapper); if(enterPark != null){ long dif = DateUtil.between(Date.from( enterPark.getCreateTime().atZone( ZoneId.systemDefault()).toInstant()), new Date(), DateUnit.SECOND, false); if(dif >= 5 && dif <= 7){ return true; }else { //判断停车场是否有了车位 String s = redisTemplate.opsForValue().get("park_change_in_" + enterPark.getParkId()); if("true".equals(s)){ redisTemplate.opsForValue().set("park_change_in_"+enterPark.getParkId(),"false",1, TimeUnit.DAYS); return true; }else { return false; } } }else { return false; } } @Override public boolean getDateDifOut(Integer barrierId) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(OutPark::getBarrierId,barrierId) .orderByDesc(OutPark::getId) .last(" limit 1"); OutPark outPark = outParkMapper.selectOne(wrapper); if(outPark != null){ long dif = DateUtil.between(Date.from( outPark.getCreateTime().atZone( ZoneId.systemDefault()).toInstant()), new Date(), DateUnit.SECOND, false); if(dif >= 20 && dif <= 23){ return true; }else { return false; } }else { return false; } } }