package com.ozs.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.ozs.common.exception.ServiceException;
import com.ozs.common.utils.StringUtils;
import com.ozs.common.utils.bean.BeanUtils;
import com.ozs.common.utils.bean.BeanValidators;
import com.ozs.entity.BaseCameraManagement;
import com.ozs.entity.BaseDeviceDynamicManagement;
import com.ozs.entity.BaseRailwayManagement;
import com.ozs.entity.BaseUser;
import com.ozs.entity.vo.BaseCameraManagementHomeVo;
import com.ozs.entity.vo.BaseCameraManagementVo;
import com.ozs.entity.vo.BaseCameraManagementVos;
import com.ozs.mapper.*;
import com.ozs.service.BaseCameraManagementService;
import com.ozs.service.BaseRailwayManagementService;
import com.ozs.service.BaseUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import javax.validation.Validator;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
*
* 相机台账管理表 服务实现类
*
*
* @author ozs
* @since 2023-02-17
*/
@Service
public class BaseCameraManagementServiceImpl extends ServiceImpl implements BaseCameraManagementService {
public static final String PATTERN = "^[0-9]*$";
@Autowired
protected Validator validator;
@Autowired
BaseDeviceDynamicManagementMapper baseDeviceDynamicManagementMapper;
@Resource
private BaseCameraManagementMapper baseCameraManagementMapper;
@Resource
private BaseUserService baseUserService;
@Resource
private BaseUserMapper baseUserMapper;
@Resource
private MsgAlarmMapper msgAlarmMapper;
@Autowired
private BaseDeptMapper baseDeptMapper;
@Autowired
private BaseRailwayManagementService baseRailwayManagementService;
/**
* 相机台账管理表导入
*
* @param accountManageList 相机台账列表
* @param updateSupport 是否更新支持,如果已存在,则进行更新数据
* @return
*/
@Override
public String importBaseAccountManagement(List accountManageList, boolean updateSupport, String userId) {
if (StringUtils.isNull(accountManageList) || accountManageList.size() == 0) {
throw new ServiceException("导入相机台账列表信息不能为空!");
}
int successNum = 0;
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
for (BaseCameraManagementVos cameraManagementVos : accountManageList) {
try {
BaseCameraManagement accountManagement = new BaseCameraManagement();
BeanUtils.copyProperties(cameraManagementVos, accountManagement);
// 判断相机编码是否存在
LambdaQueryWrapper lw = new LambdaQueryWrapper();
if (!ObjectUtils.isEmpty(accountManagement.getCameraCode())) {
lw.eq(BaseCameraManagement::getCameraCode, accountManagement.getCameraCode());
}
BaseCameraManagement baseAccountManagement = baseCameraManagementMapper.selectOne(lw);
if (ObjectUtils.isEmpty(baseAccountManagement)) {
BeanValidators.validateWithException(validator, accountManagement);
accountManagement.setUpdateBy(userId);
accountManagement.setCreateBy(userId);
Long deptId = baseDeptMapper.selectDeptByDeptName(accountManagement.getDeptName());
log.debug(accountManagement.getDeptName() + "主键id:" + deptId);
// if (!ObjectUtils.isEmpty(deptId)) {
accountManagement.setDeptId(deptId);
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
if (!ObjectUtils.isEmpty(accountManagement.getRailwayName())) {
queryWrapper.eq(BaseRailwayManagement::getRailwayName, accountManagement.getRailwayName());
}
BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
if (!ObjectUtils.isEmpty(baseRailwayManagement)) {
if (!accountManagement.getBeginMile().toString().matches(PATTERN) || !accountManagement.getInstallMile().toString().matches(PATTERN) || !accountManagement.getEndMile().toString().matches(PATTERN)) {
failureNum++;
failureMsg.append(failureNum + "、相机编码为: " + accountManagement.getCameraCode() + "的数据,里程位置填写格式不正确,请填写数字");
} else {
accountManagement.setRailwayCode(baseRailwayManagement.getRailwayCode());
accountManagement.setInstallMile(accountManagement.getInstallMile() * 1000);
accountManagement.setEndMile(accountManagement.getEndMile() * 1000);
accountManagement.setBeginMile(accountManagement.getBeginMile() * 1000);
if (accountManagement.getBeginMile() < accountManagement.getEndMile()) {
baseCameraManagementMapper.insert(accountManagement);
BaseDeviceDynamicManagement baseDeviceDynamicManagement = new BaseDeviceDynamicManagement();
baseDeviceDynamicManagement.setCameraCode(accountManagement.getCameraCode());
baseDeviceDynamicManagement.setUpdateBy(userId);
baseDeviceDynamicManagement.setCreateBy(userId);
baseDeviceDynamicManagementMapper.insert(baseDeviceDynamicManagement);
successNum++;
successMsg.append(successNum + "、相机编码 " + accountManagement.getCameraCode() + " 导入成功");
} else {
failureNum++;
failureMsg.append(failureNum + "、相机编码为: " + accountManagement.getCameraCode() + "的数据,监控范围开始里程位置不能大于监控范围结束里程位置");
}
}
} else {
failureNum++;
String msg = failureNum + "、相机所属线路名称 " + accountManagement.getRailwayName() + "不存在, 导入失败:";
failureMsg.append(msg);
log.error(msg);
}
// } else {
// failureNum++;
// String msg = failureNum + "、相机所属工务段 " + accountManagement.getDeptName() + "不存在, 导入失败:";
// failureMsg.append(msg);
// log.error(msg);
// }
} else if (updateSupport) {
BeanValidators.validateWithException(validator, accountManagement);
accountManagement.setUpdateBy(userId);
Long deptId = baseDeptMapper.selectDeptByDeptName(accountManagement.getDeptName());
log.debug(accountManagement.getDeptName() + "主键id:" + deptId);
// if (!ObjectUtils.isEmpty(deptId)) {
accountManagement.setDeptId(deptId);
baseCameraManagementMapper.update(accountManagement, lw);
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
if (!ObjectUtils.isEmpty(baseAccountManagement.getCameraCode())) {
wrapper.eq(BaseDeviceDynamicManagement::getCameraCode, baseAccountManagement.getCameraCode());
}
BaseDeviceDynamicManagement baseDeviceDynamicManagement = baseDeviceDynamicManagementMapper.selectOne(wrapper);
baseDeviceDynamicManagement.setCameraCode(accountManagement.getCameraCode());
baseDeviceDynamicManagement.setUpdateBy(userId);
baseDeviceDynamicManagementMapper.updateById(baseDeviceDynamicManagement);
successNum++;
successMsg.append(successNum + "、相机编码 " + accountManagement.getCameraCode() + " 更新成功");
// } else {
// failureNum++;
// String msg = failureNum + "、相机所属工务段 " + accountManagement.getDeptName() + "不存在, 导入失败:";
// failureMsg.append(msg);
// log.error(msg);
// }
} else {
failureNum++;
failureMsg.append(failureNum + "、相机编码 " + accountManagement.getCameraCode() + " 已存在");
}
} catch (Exception e) {
failureNum++;
String msg = failureNum + "、相机编码 " + cameraManagementVos.getCameraCode() + " 导入失败:";
failureMsg.append(msg);
log.error(msg, e);
}
}
if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
} else {
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条。");
}
return successMsg.toString();
}
/**
* 获取相机列表+数据权限
*
* @return
*/
@Override
public List selectCameraAll(BaseCameraManagementVo baseCameraManagementVo) {
// List userIdList = getUserIds(userId);
// LambdaQueryWrapper lw = new LambdaQueryWrapper();
// if (!StringUtils.isEmpty(userIdList)) {
// lw.in(BaseCameraManagement::getCreateBy, userIdList);
// }
// List baseCameraManagementList = baseCameraManagementMapper.selectList(lw);
List baseCameraManagementList = baseCameraManagementMapper.selectCameraManagementList(baseCameraManagementVo);
List allListVo = BeanUtils.entityListToVOList(baseCameraManagementList, BaseCameraManagementHomeVo.class);
for (BaseCameraManagementHomeVo baseCameraManagementHomeVo : allListVo) {
Integer isRelease = msgAlarmMapper.selectCameraCode(baseCameraManagementHomeVo.getCameraCode());
baseCameraManagementHomeVo.setIsRelease(isRelease != null ? isRelease : 1);
}
return allListVo;
}
/**
* 根据当前登陆用户ID 查询当前用户数据权限
*
* @param userId
* @return
*/
/* public List getUserIds(String userId) {
BaseUser baseUser = baseUserService.getUser(userId);
if (StringUtils.isNull(baseUser) || StringUtils.isNull(baseUser.getDataPermission())
|| StringUtils.isNull(baseUser.getDeptId())) {
return null;
}
// 数据权限 1:本人;2:本部门;3:本部门及下级部门;4:本人及本级部门;5:本人及本部门及下级部门;6:全部
Integer dataPermission = baseUser.getDataPermission();
Long deptId = baseUser.getDeptId();
Set set = new HashSet<>();
if (1 == dataPermission) {
set = baseUserMapper.getUserIdList(userId);
} else if (2 == dataPermission) {
set = baseUserMapper.getUserIdByDeptId(deptId);
} else if (3 == dataPermission) {
// 获取部门数据
List deptList = baseUserMapper.getDeptId(deptId);
// 获取用户列表
set = baseUserMapper.getUserIdByDeptIds(deptList);
} else if (4 == dataPermission) {
set = baseUserMapper.getUserIdByDeptIdAndUserId(userId, deptId);
} else if (5 == dataPermission) {
// 获取本人
Set setUser = baseUserMapper.getUserIdListBy5(userId);
// 获取部门数据
List deptList5 = baseUserMapper.getDeptId(deptId);
// 获取用户列表
Set setUsers = baseUserMapper.getUserIdByDeptIdsBy5(deptList5);
set.addAll(setUser);
set.addAll(setUsers);
} else if (6 == dataPermission) {
set = baseUserMapper.getUserIdList6();
}
List list = new ArrayList<>(set);
return list;
}*/
/**
* 根据当前登陆用户ID 查询当前用户数据权限
*
* @param userId
* @return
*/
@Override
public List getUserIdList(String userId) {
BaseUser baseUser = baseUserService.getUser(userId);
if (StringUtils.isNull(baseUser) || StringUtils.isNull(baseUser.getDataPermission())
|| StringUtils.isNull(baseUser.getDeptId())) {
return null;
}
// 数据权限 1:本人;2:本部门;3:本部门及下级部门;4:本人及本级部门;5:本人及本部门及下级部门;6:全部
Integer dataPermission = baseUser.getDataPermission();
Long deptId = baseUser.getDeptId();
Set set = new HashSet<>();
if (1 == dataPermission) {
set = baseUserMapper.getUserIdList(userId);
} else if (2 == dataPermission) {
set = baseUserMapper.getUserIdByDeptId(deptId);
} else if (3 == dataPermission) {
// 获取部门数据
List deptList = baseUserMapper.getDeptId(deptId);
// 获取用户列表
set = baseUserMapper.getUserIdByDeptIds(deptList);
} else if (4 == dataPermission) {
set = baseUserMapper.getUserIdByDeptIdAndUserId(userId, deptId);
} else if (5 == dataPermission) {
// 获取本人
Set setUser = baseUserMapper.getUserIdListBy5(userId);
// 获取部门数据
List deptList5 = baseUserMapper.getDeptId(deptId);
// 获取用户列表
Set setUsers = baseUserMapper.getUserIdByDeptIdsBy5(deptList5);
set.addAll(setUser);
set.addAll(setUsers);
} else if (6 == dataPermission) {
set = baseUserMapper.getUserIdsList();
}
List list = new ArrayList<>(set);
return list;
}
@Override
public IPage queryPage(BaseCameraManagementVo baseCameraManagementVo) {
int pageNum = Integer.parseInt(baseCameraManagementVo.getPageNum().toString());
int pageSize = Integer.parseInt(baseCameraManagementVo.getPageSize().toString());
com.github.pagehelper.Page page = PageHelper.startPage(pageNum, pageSize)
.doSelectPage(() -> baseCameraManagementMapper.selectCameraManagementList(baseCameraManagementVo));
com.baomidou.mybatisplus.extension.plugins.pagination.Page pageR =
new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(pageNum, pageSize);
pageR.setRecords(page.getResult());
pageR.setTotal(page.getTotal());
return pageR;
}
@Override
public List baseCameraManagementList(BaseCameraManagementVo baseCameraManagementVo) {
return baseCameraManagementMapper.selectCameraManagementList(baseCameraManagementVo);
}
}