| | |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.haikang.model.HKConstants; |
| | | import com.doumee.core.haikang.model.param.BaseResponse; |
| | | import com.doumee.core.haikang.model.param.request.*; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.DeviceMapper; |
| | | import com.doumee.dao.business.PlatformBroadcastLogMapper; |
| | | import com.doumee.dao.business.model.Device; |
| | | import com.doumee.dao.business.model.PlatformBroadcastLog; |
| | | import com.doumee.service.business.DeviceService; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.device.WaterElectricityUtil; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.haikang.model.HKConstants; |
| | | import com.doumee.core.haikang.model.param.BaseResponse; |
| | | import com.doumee.core.haikang.model.param.request.CustomBroadcastRequest; |
| | | import com.doumee.core.haikang.model.param.request.TransparentChannelSingleRequest; |
| | | import com.doumee.core.haikang.service.HKService; |
| | | import com.doumee.core.model.LoginUserInfo; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.*; |
| | | import com.doumee.dao.business.model.Device; |
| | | import com.doumee.dao.business.model.DeviceData; |
| | | import com.doumee.dao.business.model.PlatformBroadcastLog; |
| | | import com.doumee.service.business.DeviceService; |
| | | import com.doumee.service.business.impl.hksync.HkSyncPushServiceImpl; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.*; |
| | |
| | | * @date 2023/11/30 15:33 |
| | | */ |
| | | @Service |
| | | @Slf4j |
| | | public class DeviceServiceImpl implements DeviceService { |
| | | |
| | | @Autowired |
| | | private DeviceMapper deviceMapper; |
| | | @Autowired |
| | | private DeviceDataMapper deviceDataMapper; |
| | | @Autowired |
| | | private PlatformMapper platformMapper; |
| | | @Autowired |
| | | private PlatformDeviceMapper platformDeviceMapper; |
| | | @Autowired |
| | | private SystemDictDataBiz systemDictDataBiz; |
| | | @Autowired |
| | | private PlatformBroadcastLogMapper platformBroadcastLogMapper; |
| | | @Autowired |
| | | private InterfaceLogMapper interfaceLogMapper; |
| | | |
| | | |
| | | @Override |
| | | public Integer create(Device device) { |
| | | deviceMapper.insert(device); |
| | | return device.getId(); |
| | | public Integer create(Device model) { |
| | | model.setCreator(model.getLoginUserInfo().getId()+""); |
| | | model.setEdirot(model.getCreator()); |
| | | model.setIsdeleted(Constants.ZERO); |
| | | model.setEditDate(new Date()); |
| | | model.setCreateDate(model.getEditDate()); |
| | | if(model.getDoorNameObj()!=null && |
| | | (Constants.equalsInteger(model.getType(),Constants.DEVICE_TYPE.duanluqi) |
| | | ||Constants.equalsInteger(model.getType(),Constants.DEVICE_TYPE.dianbiao))){ |
| | | model.setDoorName(JSONObject.toJSONString(model.getDoorNameObj())); |
| | | if(StringUtils.isNotBlank(model.getLevel())){ |
| | | if(getNumberByStr(model.getLevel()) <300){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,控制时长必须大于等于300秒"); |
| | | } |
| | | } |
| | | } |
| | | deviceMapper.insert(model); |
| | | return model.getId(); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteById(Integer id) { |
| | | deviceMapper.deleteById(id); |
| | | public void deleteById(Integer id, LoginUserInfo userInfo) { |
| | | Device update = new Device(); |
| | | update.setEdirot(userInfo.getId()+""); |
| | | update.setEditDate(new Date()); |
| | | update.setIsdeleted(Constants.ONE); |
| | | update.setId(id); |
| | | deviceMapper.updateById(update); |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void deleteByIdInBatch(List<Integer> ids) { |
| | | public void deleteByIdInBatch(List<Integer> ids, LoginUserInfo userInfo) { |
| | | if (CollectionUtils.isEmpty(ids)) { |
| | | return; |
| | | } |
| | | deviceMapper.deleteBatchIds(ids); |
| | | for(Integer id :ids){ |
| | | deleteById(id,userInfo); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void updateById(Device device) { |
| | | device.setEdirot(device.getLoginUserInfo().getId()+""); |
| | | device.setEditDate(new Date()); |
| | | if(device.getDoorNameObj()!=null && |
| | | (Constants.equalsInteger(device.getType(),Constants.DEVICE_TYPE.duanluqi) |
| | | ||Constants.equalsInteger(device.getType(),Constants.DEVICE_TYPE.dianbiao))){ |
| | | device.setDoorName(JSONObject.toJSONString(device.getDoorNameObj())); |
| | | } |
| | | Device model = deviceMapper.selectById(device.getId()); |
| | | if(model ==null){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | deviceMapper.updateById(device); |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | @Override |
| | | public Device findById(Integer id) { |
| | | return deviceMapper.selectById(id); |
| | | Device d = deviceMapper.selectById(id); |
| | | if(StringUtils.isNotBlank(d.getDoorName()) &&Constants.equalsInteger(d.getType(),Constants.DEVICE_TYPE.duanluqi)){ |
| | | try { |
| | | //断路器设备参数 |
| | | d.setDoorNameObj(JSONObject.parseObject(d.getDoorName())); |
| | | }catch (Exception e){ |
| | | |
| | | } |
| | | } |
| | | return d; |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | @Override |
| | | public List<Device> findList(Device device) { |
| | | device.setIsdeleted(Constants.ZERO); |
| | | QueryWrapper<Device> wrapper = new QueryWrapper<>(device); |
| | | return deviceMapper.selectList(wrapper); |
| | | } |
| | |
| | | .eq(null !=param.getIsdeleted(),Device::getIsdeleted,param.getIsdeleted()) |
| | | .eq(Objects.isNull(param.getIsdeleted()),Device::getIsdeleted,Constants.ZERO) |
| | | .eq(null != param.getHkStatus(),Device::getHkStatus,param.getHkStatus()); |
| | | return deviceMapper.selectList(wrapper); |
| | | List<Device> list = deviceMapper.selectList(wrapper); |
| | | if(list!=null){ |
| | | for(Device d : list){ |
| | | if(StringUtils.isNotBlank(d.getDoorName()) &&Constants.equalsInteger(d.getType(),Constants.DEVICE_TYPE.duanluqi)){ |
| | | try { |
| | | //断路器设备参数 |
| | | d.setDoorNameObj(JSONObject.parseObject(d.getDoorName())); |
| | | }catch (Exception e){ |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | if (pageWrap.getModel().getName() != null) { |
| | | queryWrapper.lambda().like(Device::getName, pageWrap.getModel().getName()); |
| | | } |
| | | if (pageWrap.getModel().getDoorNo() != null) { |
| | | queryWrapper.lambda().like(Device::getDoorNo, pageWrap.getModel().getDoorNo()); |
| | | } |
| | | if (pageWrap.getModel().getNo() != null) { |
| | | queryWrapper.lambda().like(Device::getNo, pageWrap.getModel().getNo()); |
| | | } |
| | | if (pageWrap.getModel().getDoorName() != null) { |
| | | queryWrapper.lambda().like(Device::getDoorName, pageWrap.getModel().getDoorName()); |
| | |
| | | queryWrapper.orderByAsc(sortData.getProperty()); |
| | | } |
| | | } |
| | | return PageData.from(deviceMapper.selectPage(page, queryWrapper)); |
| | | IPage<Device> result = deviceMapper.selectPage(page, queryWrapper); |
| | | if(result!=null){ |
| | | for(Device d : result.getRecords()){ |
| | | if(StringUtils.isNotBlank(d.getDoorName()) |
| | | && (Constants.equalsInteger(d.getType(),Constants.DEVICE_TYPE.duanluqi)|| |
| | | Constants.equalsInteger(d.getType(),Constants.DEVICE_TYPE.dianbiao))){ |
| | | try { |
| | | //断路器设备参数 |
| | | d.setDoorNameObj(JSONObject.parseObject(d.getDoorName())); |
| | | }catch (Exception e){ |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return PageData.from(result); |
| | | } |
| | | |
| | | @Override |
| | |
| | | QueryWrapper<Device> wrapper = new QueryWrapper<>(device); |
| | | return deviceMapper.selectCount(wrapper); |
| | | } |
| | | |
| | | @Override |
| | | public void setBroadcaseBobao(Device model){ |
| | | List<String> ids = new ArrayList<>(); |
| | | ids.add(model.getHkId()); |
| | | CustomBroadcastRequest request = new CustomBroadcastRequest(); |
| | | request.setAudioPointIndexCode(ids); |
| | | request.setPlayDuration(15);//单位秒 |
| | | request.setBroadCastMode("tts"); |
| | | request.setPriority(1); |
| | | request.setState(1);//播放/停止标识 1-播放,0-停止 |
| | | request.setPlayTtsContent(model.getSendInfo()); |
| | | BaseResponse response = HKService.customBroadcast(request); |
| | | if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"发送失败:"+ JSONObject.toJSONString(response)); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void updateUsedById(Device param){ |
| | | Device model = deviceMapper.selectById(param.getId()); |
| | | if(model ==null && Constants.equalsInteger(param.getType(),Constants.DEVICE_TYPE.duanluqi)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | |
| | | this.updateById(param); |
| | | } |
| | | |
| | | @Override |
| | | public void dianbaoCmd(Device param){ |
| | | Device model = deviceMapper.selectById(param.getId()); |
| | | if(model ==null && Constants.equalsInteger(param.getType(),Constants.DEVICE_TYPE.dianbiao)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | if (param.getStatus() == null || param.getCmdDate() == null |
| | | ||param.getCmdDate().getTime() <= System.currentTimeMillis()) { |
| | | //如果是开闸 |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | |
| | | boolean r ; |
| | | String date = DateUtil.formatDate(new Date(),"yyyyMMddHHmmss"); |
| | | if(Constants.equalsInteger(param.getStatus(),Constants.ONE)) { |
| | | //如果是开闸 |
| | | r = WaterElectricityUtil.electricityAct(param.getIp(),Integer.parseInt(param.getPort()),param.getNo(),0,date); |
| | | }else { |
| | | //如果是合闸 |
| | | r = WaterElectricityUtil.electricityAct(param.getIp(),Integer.parseInt(param.getPort()),param.getNo(),1,date); |
| | | } |
| | | if(!r){ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"远程控制电表失败,请稍后重试!"); |
| | | } |
| | | String curremak = "【"+param.getLoginUserInfo().getRealname() |
| | | +"】于"+ DateUtil.getPlusTime2(new Date()) +"进行了"+(Constants.equalsInteger(param.getStatus(),Constants.ONE)?"【合闸】":"【分闸】")+"操作,开关【"+param.getChannelNo()+"】;"; |
| | | deviceMapper.update(null,new UpdateWrapper<Device>().lambda() |
| | | .set(Device::getRemark,curremak) |
| | | .set(Device::getEditDate,new Date()) |
| | | .set(Device::getEdirot,param.getLoginUserInfo().getId()) |
| | | .eq(Device::getId,param.getId())); |
| | | DeviceData data = new DeviceData(); |
| | | data.setCreateDate(new Date()); |
| | | data.setEditDate(new Date()); |
| | | data.setCreator(param.getLoginUserInfo().getId()); |
| | | data.setEditor(param.getLoginUserInfo().getId()); |
| | | data.setDeviceId(param.getId()+""); |
| | | data.setDataType(Constants.ONE);// |
| | | data.setVal1("远程控制"); |
| | | data.setVal2(curremak); |
| | | data.setHappenTime(DateUtil.getPlusTime2(data.getCreateDate())); |
| | | data.setVal3((Constants.equalsInteger(param.getStatus(),Constants.ONE)?"【合闸】":"【分闸】")); |
| | | data.setVal4(param.getLoginUserInfo().getRealname()); |
| | | data.setVal5(param.getChannelNo()); |
| | | deviceDataMapper.insert(data); |
| | | |
| | | } |
| | | @Override |
| | | @Transactional |
| | | public void dianbiaoData(Device param){ |
| | | Device model = deviceMapper.selectById(param.getId()); |
| | | if(model ==null && Constants.equalsInteger(param.getType(),Constants.DEVICE_TYPE.dianbiao)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | try { |
| | | Map<String, Object> readData= WaterElectricityUtil.electricityData(model.getIp(),Integer.parseInt(model.getPort()),model.getNo()); |
| | | if(readData!=null){ |
| | | String curremak = "【"+param.getLoginUserInfo().getRealname() |
| | | +"】于"+ DateUtil.getPlusTime2(new Date()) +"进行了数据读取操作"; |
| | | Date time =(Date) readData.get("time"); |
| | | String total = (Double) readData.get("total")+""; |
| | | String status = (String) readData.get("status"); |
| | | model.setHkDate(new Date());//最近同步时间 |
| | | model.setOnline(Constants.ONE);//标识设备在线 |
| | | model.setRemark(curremak); |
| | | |
| | | DeviceData data = new DeviceData(); |
| | | data.setCreateDate(new Date()); |
| | | data.setEditDate(new Date()); |
| | | data.setCreator(param.getLoginUserInfo().getId()); |
| | | data.setEditor(param.getLoginUserInfo().getId()); |
| | | data.setDeviceId(param.getId()+""); |
| | | data.setDataType(Constants.ZERO);// |
| | | data.setVal1(total); |
| | | data.setVal2(status); |
| | | data.setHappenTime(DateUtil.getPlusTime2(data.getCreateDate())); |
| | | data.setVal3(DateUtil.getPlusTime2(time)); |
| | | data.setVal4(param.getLoginUserInfo().getRealname()); |
| | | data.setVal5(param.getNo());//地址域 |
| | | deviceDataMapper.insert(data); |
| | | deviceMapper.updateById(model); |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | log.error("电表数据读取失败,"+e.getMessage()); |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"读取电表数据失败!"); |
| | | } |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public void setLedContent(TransparentChannelSingleRequest model) { |
| | |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,屏幕内容设置失败"+(log!=null?log.getHkInfo():"")); |
| | | } |
| | | } |
| | | |
| | | |
| | | private DeviceData getLastDataByVal1(String b, List<DeviceData> dataList,double limit) { |
| | | List<DeviceData> list = new ArrayList<>(); |
| | | for(DeviceData d :dataList){ |
| | | if(StringUtils.equals(d.getVal1(),b)){ |
| | | if(limit <= getNumberByStr(d.getVal2())){ |
| | | //如果有实时电流值大于空闲阈值,则表示工作中,不做处理 |
| | | return null; |
| | | } |
| | | list.add(d); |
| | | } |
| | | } |
| | | return list.size()>0?list.get(0):null; |
| | | } |
| | | |
| | | private double getNumberByStr(String level) { |
| | | try { |
| | | return Double.parseDouble(level); |
| | | }catch (Exception e){ |
| | | |
| | | } |
| | | return 0; |
| | | } |
| | | } |