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.core.toolkit.StringUtils; 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 parkId) { EnterPark enterPark=null; String s1 = redisTemplate.opsForValue().get("enterPark_dif_" + parkId); if(StringUtils.isBlank(s1)){ QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(EnterPark::getParkId,parkId) .orderByDesc(EnterPark::getId) .last(" limit 1"); enterPark = enterParkMapper.selectOne(wrapper); String jsonValue = JSON.toJSONString(enterPark); redisTemplate.opsForValue().set("enterPark_dif_"+ parkId, jsonValue); }else { enterPark = JSON.parseObject(s1, EnterPark.class); } if(enterPark != null){ long dif = DateUtil.between(Date.from( enterPark.getCreateTime().atZone( ZoneId.systemDefault()).toInstant()), new Date(), DateUnit.SECOND, false); if(dif >= 3 && dif <= 5){ 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; } return false; } @Override public boolean getDateDifOut(Integer barrierId) { OutPark outPark=null; String s1 = redisTemplate.opsForValue().get("outPark_dif_" + barrierId); if(StringUtils.isBlank(s1)){ QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(OutPark::getBarrierId,barrierId) .orderByDesc(OutPark::getId) .last(" limit 1"); outPark = outParkMapper.selectOne(wrapper); String jsonValue = JSON.toJSONString(outPark); redisTemplate.opsForValue().set("outPark_dif_"+ barrierId, jsonValue); }else { outPark = JSON.parseObject(s1, OutPark.class); } 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; } } }