package com.bizmatics.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.bizmatics.common.core.bean.CommonPage;
import com.bizmatics.common.core.exception.BusinessException;
import com.bizmatics.common.mvc.base.AbstractCrudService;
import com.bizmatics.model.Device;
import com.bizmatics.model.DeviceAttribute;
import com.bizmatics.model.PlatformArea;
import com.bizmatics.model.Site;
import com.bizmatics.model.system.SysUser;
import com.bizmatics.model.vo.*;
import com.bizmatics.persistence.mapper.PlatformAreaMapper;
import com.bizmatics.persistence.mapper.system.SysUserMapper;
import com.bizmatics.service.PlatformAreaService;
import com.bizmatics.service.util.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
*
* 服务实现类
*
*
* @author ya
* @since 2021-09-29
*/
@Service
public class PlatformAreaServiceImpl extends AbstractCrudService implements PlatformAreaService {
@Autowired
private SiteServiceImpl siteService;
@Autowired
private DeviceServiceImpl deviceService;
@Autowired
private DeviceStatusServiceImpl deviceStatusService;
@Autowired
private DeviceAttributeServiceImpl deviceAttributeService;
@Autowired
private SysUserMapper userMapper;
@Override
public void platformAreaAdd(PlatformArea platformArea){
List tenantDaya = userMapper.getTenantId(SecurityUtils.getLoginUser().getUser().getUserId());
if (tenantDaya.size()<0) {
throw new BusinessException("无此租户,请联系管理员");
}
LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(PlatformArea::getEnable, 1).eq(PlatformArea::getPlatformAreaCode, platformArea.getPlatformAreaCode());
List platformAreaList = this.list(queryWrapper);
if (platformAreaList!=null&&!platformAreaList.isEmpty()){
throw new BusinessException("台区编号重复,不可重复添加台区");
}else {
platformArea.setCreator(SecurityUtils.getLoginUser().getUser().getUserName());
platformArea.setCreateTime(new Date());
platformArea.setTenantId(tenantDaya.get(0).getTenantId());
platformArea.setEnable(1);
this.save(platformArea);
}
}
@Override
public void platformAreaUpdate(PlatformArea platformArea){
this.updateById(platformArea);
}
@Override
public List platformAreaList(Integer id){
LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(PlatformArea::getEnable, 1).eq(PlatformArea::getId, id);
List platformAreaList = this.list(queryWrapper);
LambdaQueryWrapper siteQueryWrapper = Wrappers.lambdaQuery();
siteQueryWrapper.eq(Site::getStationAreaId,platformAreaList.get(0).getId()).eq(Site::getEnable, 1);
List siteList = siteService.list(siteQueryWrapper);
int siteCount = siteList.size();
List siteListOne = new ArrayList<>();
List deviceList = new ArrayList<>();
if (siteList.size()>0){
for (int i = 0; i < siteList.size(); i++) {
siteListOne.add(siteList.get(i).getId());
}
LambdaQueryWrapper deviceQueryWrapper = Wrappers.lambdaQuery();
deviceQueryWrapper.in(Device::getSiteId,siteListOne).eq(Device::getEnable, 1);
deviceList = deviceService.list(deviceQueryWrapper);
}
Integer deviceCount = deviceList.size();
PlatformAreaVo platformAreaVo = new PlatformAreaVo();
platformAreaVo.setPlatformAreaName(platformAreaList.get(0).getPlatformAreaName());
platformAreaVo.setPlatformAreaAddress(platformAreaList.get(0).getPlatformAreaAddress());
platformAreaVo.setPlatformAreaCode(platformAreaList.get(0).getPlatformAreaCode());
platformAreaVo.setSiteCount(siteCount);
platformAreaVo.setDeviceCount(deviceCount);
platformAreaVo.setSite(siteList);
platformAreaVo.setId(platformAreaList.get(0).getId());
platformAreaVo.setEnable(platformAreaList.get(0).getEnable());
List platformAreaVoList = new ArrayList<>();
platformAreaVoList.add(platformAreaVo);
return platformAreaVoList;
}
@Override
public CommonPage platformAreaListOne(String platformAreaName,Integer current,Integer size){
List tenantDaya = userMapper.getTenantId(SecurityUtils.getLoginUser().getUser().getUserId());
if (tenantDaya.size()<0) {
throw new BusinessException("无此租户,请联系管理员");
}
int platformAreaConut = baseMapper.platformSiteCount(platformAreaName,null,0,tenantDaya.get(0).getTenantId());
int startCurrent = (current - 1) * size;
List platformAreaVoSite = baseMapper.siteCount(platformAreaName,startCurrent,size,tenantDaya.get(0).getTenantId());
List platformAreaVoDevice =baseMapper.deviceCount(platformAreaName,tenantDaya.get(0).getTenantId());
List platformAreaList = new ArrayList<>();
for (int i = 0; i < platformAreaVoSite.size(); i++) {
PlatformAreaVo platformArea = new PlatformAreaVo();
platformArea.setPlatformAreaName(platformAreaVoSite.get(i).getPlatformAreaName());
platformArea.setPlatformAreaAddress(platformAreaVoSite.get(i).getPlatformAreaAddress());
platformArea.setPlatformAreaCode(platformAreaVoSite.get(i).getPlatformAreaCode());
platformArea.setId(platformAreaVoSite.get(i).getId());
platformArea.setEnable(platformAreaVoSite.get(i).getEnable());
platformArea.setSiteCount(platformAreaVoSite.get(i).getSiteCount());
platformArea.setCreator(platformAreaVoSite.get(i).getCreator());
platformArea.setTenantId(platformAreaVoSite.get(i).getTenantId());
platformArea.setCreateTime(platformAreaVoSite.get(i).getCreateTime());
if (platformAreaVoDevice.size()>0){
Integer deviceCount = 0;
for (int j = 0; j < platformAreaVoDevice.size(); j++) {
int id1=platformAreaVoSite.get(i).getId();
int id2=platformAreaVoDevice.get(j).getId();
if (id1==id2){
deviceCount = deviceCount + platformAreaVoDevice.get(j).getDeviceCount();
}
}
platformArea.setDeviceCount(deviceCount);
}else {
platformArea.setDeviceCount(0);
}
platformAreaList.add(platformArea);
}
return new CommonPage<>(platformAreaList, platformAreaConut, size, current);
}
// @Override
// public CommonPage platformAreaListOne(String platformAreaName,Integer current,Integer size){
// SysUser user = SecurityUtils.getLoginUser().getUser();
// List platformAreaVoSiteOne = baseMapper.siteCount(platformAreaName,null,0,user.getUserId());
// int startCurrent = (current - 1) * size;
// List platformAreaVoSite = baseMapper.siteCount(platformAreaName,startCurrent,size,user.getUserId());
// List platformAreaVoDevice =baseMapper.deviceCount(platformAreaName);
// List platformAreaList = new ArrayList<>();
// for (int i = 0; i < platformAreaVoSite.size(); i++) {
// PlatformAreaVo platformArea = new PlatformAreaVo();
// platformArea.setPlatformAreaName(platformAreaVoSite.get(i).getPlatformAreaName());
// platformArea.setPlatformAreaAddress(platformAreaVoSite.get(i).getPlatformAreaAddress());
// platformArea.setPlatformAreaCode(platformAreaVoSite.get(i).getPlatformAreaCode());
// platformArea.setId(platformAreaVoSite.get(i).getId());
// platformArea.setEnable(platformAreaVoSite.get(i).getEnable());
// platformArea.setSiteCount(platformAreaVoSite.get(i).getSiteCount());
// if (platformAreaVoDevice.size()>0){
// Integer deviceCount = 0;
// for (int j = 0; j < platformAreaVoDevice.size(); j++) {
// int id1=platformAreaVoSite.get(i).getId();
// int id2=platformAreaVoDevice.get(j).getId();
// if (id1==id2){
// deviceCount = deviceCount + platformAreaVoDevice.get(j).getDeviceCount();
// }
// }
// platformArea.setDeviceCount(deviceCount);
// }else {
// platformArea.setDeviceCount(0);
// }
//
// platformAreaList.add(platformArea);
// }
// return new CommonPage<>(platformAreaList, platformAreaVoSiteOne.size(), size, current);
// }
@Override
public void platformAreaDel(int id){
PlatformArea platformArea = new PlatformArea();
platformArea.setId(id);
platformArea.setEnable(0);
this.updateById(platformArea);
}
@Override
public List siteDeviceList(Integer stationAreaId){
List siteDeviceList = baseMapper.deviceList(stationAreaId);
return siteDeviceList;
}
@Override
public void siteDeviceUpdate (DeviceVo deviceVo){
deviceService.updateById(deviceVo.getDevice());
deviceAttributeService.updateById(deviceVo.getDeviceAttribute());
}
@Override
public void siteDeviceDel(int deviceId,int deviceAttributeId){
Device device = new Device();
DeviceAttribute deviceAttribute = new DeviceAttribute();
device.setId(deviceId);
device.setEnable(0);
deviceAttribute.setId(deviceAttributeId);
deviceAttribute.setStatus(0);
deviceService.updateById(device);
deviceAttributeService.updateById(deviceAttribute);
}
}