package com.ruoyi.sy.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.sy.domain.ArdSyCar; import com.ruoyi.sy.domain.ArdSyCarLock; import com.ruoyi.sy.domain.ArdSyCarRtu; import com.ruoyi.sy.mapper.ArdSyCarLockMapper; import com.ruoyi.sy.mapper.ArdSyCarMapper; import com.ruoyi.sy.mapper.ArdSyCarRtuMapper; import com.ruoyi.sy.param.AddRtuParam; import com.ruoyi.sy.param.LockTypeParam; import com.ruoyi.sy.param.RtuTypeParam; import com.ruoyi.sy.service.ArdSyCarLockService; import com.ruoyi.sy.vo.CarVo; import com.ruoyi.sy.vo.RtuVo; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.utils.qymqtt.newM.EmqClient; import com.ruoyi.utils.qymqtt.newM.QosEnum; import com.ruoyi.utils.qymqtt.oldM.MqttCustomerClient; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; /** * @author Administrator */ @Slf4j @Service public class ArdSyCarLockServiceImpl implements ArdSyCarLockService { @Autowired private ArdSyCarMapper ardSyCarMapper; @Autowired private SysDeptMapper sysDeptMapper; @Autowired private ArdSyCarRtuMapper rtuMapper; @Autowired private ArdSyCarLockMapper lockMapper; @Autowired private SysConfigMapper configMapper; @Override public List car() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.isNull("reserved_1").or().eq("reserved_1",""); List ardSyCars= ardSyCarMapper.selectList(queryWrapper); return carAnalysis(ardSyCars); } @Override public List carAddOne(String carId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.isNull("reserved_1").or().eq("reserved_1","").or().eq("car_id",carId); List ardSyCars= ardSyCarMapper.selectList(queryWrapper); return carAnalysis(ardSyCars); } @Override public int addRtu(AddRtuParam addRtuParam) { ArdSyCarRtu ardSyCarRtu = new ArdSyCarRtu(); ardSyCarRtu.setId(String.valueOf(UUID.randomUUID())); ardSyCarRtu.setCarId(addRtuParam.getCarId()); ardSyCarRtu.setTopicPublish("/p"+addRtuParam.getCarId()+"/set/"); ardSyCarRtu.setTopicSubscribe("/p"+addRtuParam.getCarId()+"/"); ardSyCarRtu.setInstallType(addRtuParam.getInstallType()); ardSyCarRtu.setUnloadType(addRtuParam.getUnloadType()); int num = rtuMapper.insert(ardSyCarRtu); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",addRtuParam.getCarId()); ArdSyCar ardSyCar = ardSyCarMapper.selectOne(queryWrapper); ardSyCar.setReserved1(ardSyCarRtu.getId()); ardSyCarMapper.updateById(ardSyCar); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(addRtuParam.getCarId()+"mqtt"); mqttCustomerClient.subscribe(ardSyCarRtu.getTopicSubscribe()); return num; } @Override public List carList() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.ne("reserved_1",""); List ardSyCars = ardSyCarMapper.selectList(queryWrapper); return carAnalysis(ardSyCars); } @Override public int delCar(String id) { ArdSyCarRtu ardSyCarRtu = rtuMapper.selectById(id); String subscribe = ardSyCarRtu.getTopicSubscribe(); MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); mqttCustomerClient.connect(ardSyCarRtu.getCarId()+"del"); mqttCustomerClient.unSubscribe(subscribe); rtuMapper.deleteById(id); QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.eq("rtu_id",id); lockMapper.delete(queryWrapper1); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("reserved_1",id); ArdSyCar ardSyCar = ardSyCarMapper.selectOne(queryWrapper); ardSyCar.setReserved1(""); return ardSyCarMapper.updateById(ardSyCar); } @Override public CarVo carOne(String carId) { CarVo carVo = new CarVo(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",carId); ArdSyCar ardSyCar= ardSyCarMapper.selectOne(queryWrapper); carVo.setCarId(ardSyCar.getCarId()); carVo.setCarPicture(ardSyCar.getCarPicture()); carVo.setCarType(ardSyCar.getCarType()); carVo.setDeptId(ardSyCar.getDeptId()); SysDept sysDept = sysDeptMapper.selectById(ardSyCar.getDeptId()); carVo.setDeptName(sysDept.getDeptName()); carVo.setRtu(ardSyCar.getReserved1()); return carVo; } @Override public List carLock(String rtu) { // List locks = new ArrayList<>(); // try { // QueryWrapper queryWrapper = new QueryWrapper<>(); // queryWrapper.eq("rtu_id",rtu); // locks = lockMapper.selectList(queryWrapper); // }catch (Exception e){ // // } return lockMapper.lockList(rtu); } @Override public int addUpdLock(List ardSyCarLock) { int num = 0; if(ardSyCarLock.size()>0){ String rtu = ardSyCarLock.get(0).getRtuId(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("rtu_id",rtu); lockMapper.delete(queryWrapper); for (int i = 0; i < ardSyCarLock.size(); i++) { ArdSyCarLock lock = ardSyCarLock.get(i); if(lock.getId()==null){ lock.setId(String.valueOf(UUID.randomUUID())); } num += lockMapper.insert(lock); } } return num; } @Override public RtuVo updRtu(String carId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",carId); ArdSyCarRtu ardSyCarRtu = rtuMapper.selectOne(queryWrapper); RtuVo rtuVo = new RtuVo(); QueryWrapper queryWrapper1 = new QueryWrapper<>(); queryWrapper1.eq("car_id",carId); ArdSyCar ardSyCar= ardSyCarMapper.selectOne(queryWrapper1); rtuVo.setCarId(ardSyCar.getCarId()); rtuVo.setCarPicture(ardSyCar.getCarPicture()); rtuVo.setCarType(ardSyCar.getCarType()); rtuVo.setDeptId(ardSyCar.getDeptId()); SysDept sysDept = sysDeptMapper.selectById(ardSyCar.getDeptId()); rtuVo.setDeptName(sysDept.getDeptName()); rtuVo.setRtu(ardSyCar.getReserved1()); rtuVo.setTopicPublish(ardSyCarRtu.getTopicPublish()); rtuVo.setTopicSubscribe(ardSyCarRtu.getTopicSubscribe()); return rtuVo; } @Override public int updRtuCar(ArdSyCarRtu ardSyCarRtu) { rtuMapper.updateById(ardSyCarRtu); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",ardSyCarRtu.getCarId()); ArdSyCar ardSyCar = ardSyCarMapper.selectOne(queryWrapper); ardSyCar.setReserved1(ardSyCarRtu.getId()); return ardSyCarMapper.updateById(ardSyCar); } @Override public List queryCar(List list) { QueryWrapper queryWrapper = new QueryWrapper<>(); if(list.size()>0){ queryWrapper.ne("reserved_1","").notIn("car_id",list); }else { queryWrapper.ne("reserved_1",""); } List ardSyCars = ardSyCarMapper.selectList(queryWrapper); return carAnalysis(ardSyCars); } @Override public List addCarBefore(String id) { QueryWrapper ardSyCarQueryWrapper = new QueryWrapper<>(); ardSyCarQueryWrapper.eq("car_id",id); List carList = ardSyCarMapper.selectList(ardSyCarQueryWrapper); return carAnalysis(carList); } @Override public List data(String msg) { // String pattern = "0.00"; // 指定保留两位小数的格式 // DecimalFormat decimalFormat = new DecimalFormat(pattern); // JSONObject jsonObject = JSONObject.parseObject(msg); List lockList = new ArrayList<>(); ArdSyCarLock ardSyCarLock1 = new ArdSyCarLock(); ardSyCarLock1.setRelay("A01"); // ardSyCarLock1.setRelayInfo(String.valueOf(jsonObject.getInteger("A01"))); ardSyCarLock1.setRelayInfo(jsonObject.getInteger("A01")); ardSyCarLock1.setCurrents("C01"); // ardSyCarLock1.setCurrentInfo(decimalFormat.format(jsonObject.getDouble("C01"))); ardSyCarLock1.setCurrentInfo(jsonObject.getDouble("C01")); lockList.add(ardSyCarLock1); ArdSyCarLock ardSyCarLock2 = new ArdSyCarLock(); ardSyCarLock2.setRelay("A02"); ardSyCarLock2.setRelayInfo(jsonObject.getInteger("A02")); ardSyCarLock2.setCurrents("C02"); ardSyCarLock2.setCurrentInfo(jsonObject.getDouble("C02")); lockList.add(ardSyCarLock2); return lockList; } @Override public int updLock(ArdSyCarLock ardSyCarLock) { return lockMapper.updateById(ardSyCarLock); } @Override public ArdSyCarLock getCurrentInfo(String Rtu, String currents) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("rtu_id",Rtu).eq("currents",currents); return lockMapper.selectOne(queryWrapper); } @Override public AjaxResult seal(RtuTypeParam rtuTypeParam) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("carId",rtuTypeParam.getCarId()); ArdSyCarRtu ardSyCarRtu = rtuMapper.selectOne(queryWrapper); //1解封 if(rtuTypeParam.getType()==1){ Map map = new HashMap<>(); map.put("A01", 110000);//导通第一路继电器 map.put("A02", 110000);//导通第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); EmqClient emqClient = new EmqClient(rtuTypeParam.getCarId()+"mqttPublish"+UUID.randomUUID()); emqClient.connect(); emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); return AjaxResult.success("解封命令发送成功!"); // return AjaxResult.success(mqttOnce.publishCar(rtuTypeParam.getCarId(),ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"解封")); } //0施封 if(rtuTypeParam.getType()==0){ //锁开关状态 int lockCloseNum = 0; //查询锁信息 List ardSyCarLocks = carLock(ardSyCarRtu.getId()); for (int j = 0; j < ardSyCarLocks.size(); j++) { ArdSyCarLock ardSyCarLock = ardSyCarLocks.get(j); String currents = ardSyCarLock.getCurrents(); Double currentInfo = ardSyCarLock.getCurrentInfo(); //电流值为4.0是关锁状态 if(currentInfo.equals(4.00) || currentInfo.equals(4)){ lockCloseNum += 1; }else { String key = ""; if(currents.equals("C01")){ key = "D03"; }else if(currents.equals("C02")){ key = "D04"; } Map map = new HashMap(); map.put(key, 0.01); map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); EmqClient emqClient = new EmqClient(rtuTypeParam.getCarId()+"mqttPublish"+UUID.randomUUID()); emqClient.connect(); emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); // mqttOnce.publishCar("carId",ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"开锁:"+currents); while(true){ ArdSyCarLock ardSyCarLock1 = getCurrentInfo(ardSyCarRtu.getId(),currents); Double currentInfo1 = ardSyCarLock1.getCurrentInfo(); if(currentInfo1.equals(4.00) || currentInfo1.equals(4)){ lockCloseNum +=1; break; } } } } if(lockCloseNum == 2){ Map map = new HashMap<>(); map.put("A01", 100000);//断开第一路继电器 map.put("A02", 100000);//断开第二路继电器 map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); EmqClient emqClient = new EmqClient(rtuTypeParam.getCarId()+"mqttPublish"+UUID.randomUUID()); emqClient.connect(); emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); return AjaxResult.success("施封命令发生成功!"); // return AjaxResult.success(mqttOnce.publishCar(rtuTypeParam.getCarId(),ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"施封")); } } return AjaxResult.success(); } @Override public AjaxResult onOff(LockTypeParam lockTypeParam) throws MqttException { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",lockTypeParam.getCarId()); ArdSyCarRtu ardSyCarRtu = rtuMapper.selectOne(queryWrapper); ArdSyCarLock ardSyCarLock = lockMapper.selectById(lockTypeParam.getLockId()); Integer relay = ardSyCarLock.getRelayInfo(); if(relay!=null){ if(relay.equals("1")){ return AjaxResult.error(0,"该锁处于解封状态,远程无法操控,请先执行施封操作!"); } } String key = ""; String currents = ardSyCarLock.getCurrents(); if(currents.equals("C01")){ key = "D03"; }else if(currents.equals("C02")){ key = "D04"; } double lockState = lockTypeParam.getNum(); if(lockState==100){ lockState = 99.99; }else if(lockState==0){ lockState = 0.01; }else{ lockState = lockState + 0.01; } Map map = new HashMap(); map.put(key, lockState);//范围是0.01到99.99 map.put("res", String.valueOf(System.currentTimeMillis())); String mapString = JSON.toJSONString(map); System.out.println(mapString); EmqClient emqClient = new EmqClient(lockTypeParam.getCarId()+"mqttPublish"+UUID.randomUUID()); emqClient.connect(); emqClient.publish(ardSyCarRtu.getTopicPublish(),mapString, QosEnum.QoS2,false); // MqttCustomerClient mqttCustomerClient = new MqttCustomerClient(); // mqttCustomerClient.connect(lockTypeParam.getCarId()+"change"+UUID.randomUUID()); // mqttCustomerClient.pushlish(ardSyCarRtu.getTopicPublish(),mapString); return AjaxResult.success("开关锁命令发送成功,发送进度为"+lockTypeParam.getNum()); } @Override public List lockIng(String carId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("car_id",carId); ArdSyCarRtu ardSyCarRtu = rtuMapper.selectOne(queryWrapper); List locks = lockMapper.lockList(ardSyCarRtu.getId()); for (int i = 0; i < locks.size(); i++) { ArdSyCarLock ardSyCarLock = locks.get(i); double info = ardSyCarLock.getCurrentInfo(); int d = (int) ((int)(info*150/138.3 - 4)/0.16); ardSyCarLock.setCurrentInfo((double) d); } return locks; } //车辆列表封装 public List carAnalysis(List ardSyCars){ List list = new ArrayList<>(); for (int i = 0; i < ardSyCars.size(); i++) { ArdSyCar ardSyCar = ardSyCars.get(i); CarVo carVo = new CarVo(); carVo.setCarId(ardSyCar.getCarId()); carVo.setCarPicture(ardSyCar.getCarPicture()); carVo.setCarType(ardSyCar.getCarType()); carVo.setDeptId(ardSyCar.getDeptId()); SysDept sysDept = sysDeptMapper.selectById(ardSyCar.getDeptId()); carVo.setDeptName(sysDept.getDeptName()); carVo.setRtu(ardSyCar.getReserved1()); carVo.setCarModel(ardSyCar.getCarModel()); list.add(carVo); } return list; } }