package com.bizmatics.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.bizmatics.common.core.exception.BusinessException;
import com.bizmatics.common.core.util.BeanMapperUtils;
import com.bizmatics.model.Site;
import com.bizmatics.persistence.mapper.DeviceMapper;
import com.bizmatics.persistence.mapper.SiteMapper;
import com.bizmatics.service.DeviceService;
import com.bizmatics.service.SiteService;
import com.bizmatics.common.mvc.base.AbstractCrudService;
import com.bizmatics.service.enums.DeviceStatusCode;
import com.bizmatics.service.util.SessionLocal;
import com.bizmatics.service.vo.DeviceCountVO;
import com.bizmatics.service.vo.SiteVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
*
* 服务实现类
*
*
* @author ya
* @since 2021-07-07
*/
@Service
public class SiteServiceImpl extends AbstractCrudService implements SiteService {
@Autowired
private DeviceMapper deviceMapper;
@Override
public DeviceCountVO selectCount() {
Integer userId = SessionLocal.getUserId();
DeviceCountVO deviceCountVO = new DeviceCountVO();
deviceCountVO.setNormalCount(baseMapper.selectCount(userId,null,DeviceStatusCode.NORMAL.getValue()));
deviceCountVO.setOffLineCount(baseMapper.selectCount(userId,null,DeviceStatusCode.OFFLINE.getValue()));
deviceCountVO.setDeviceCount(baseMapper.selectCount(userId,null,DeviceStatusCode.DEVICE.getValue()));
deviceCountVO.setFaultCount(baseMapper.selectCount(userId,null,DeviceStatusCode.FAULT.getValue()));
return deviceCountVO;
}
@Override
public List list(String name) {
List list = new ArrayList<>();
List sites = baseMapper.list(SessionLocal.getUserId());
Integer userId = SessionLocal.getUserId();
for (Site site:sites) {
SiteVO siteVo = BeanMapperUtils.map(site, SiteVO.class);
siteVo.setDeviceCount(deviceMapper.selectCount(userId,siteVo.getId(),null,null,null,null));
int deviceCount = baseMapper.selectCount(userId,siteVo.getId(),DeviceStatusCode.DEVICE.getValue());
int offLineCount = baseMapper.selectCount(userId,siteVo.getId(),DeviceStatusCode.OFFLINE.getValue());
int faultCount = baseMapper.selectCount(userId,siteVo.getId(),DeviceStatusCode.FAULT.getValue());
siteVo.setAlarmPowerCount(deviceCount);
if (deviceCount > 0){
siteVo.setStatus(DeviceStatusCode.FAULT.getDescribe());
}else if (offLineCount > 0){
siteVo.setStatus(DeviceStatusCode.OFFLINE.getDescribe());
}else if (faultCount > 0){
siteVo.setStatus(DeviceStatusCode.FAULT.getDescribe());
}else {
siteVo.setStatus(DeviceStatusCode.NORMAL.getDescribe());
}
list.add(siteVo);
}
return list;
}
@Override
public SiteVO getOne(Long siteId) {
Site site = baseMapper.selectOne(Wrappers.lambdaQuery(Site.class).eq(Site::getId, siteId));
return Optional.ofNullable(site).map(st -> BeanMapperUtils.map(site,SiteVO.class)).orElseThrow(() -> new BusinessException("站点信息不存在"));
}
@Override
public List getSiteList(Integer userId) {
return baseMapper.list(SessionLocal.getUserId());
}
}