package com.fdkankan.ucenter.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.ucenter.common.PageInfo; import com.fdkankan.common.util.DateUtil; import com.fdkankan.ucenter.constant.CameraConstant; import com.fdkankan.ucenter.constant.LoginConstant; import com.fdkankan.ucenter.entity.Camera; import com.fdkankan.ucenter.entity.CameraDetail; import com.fdkankan.ucenter.entity.User; import com.fdkankan.ucenter.entity.UserIncrement; import com.fdkankan.ucenter.mapper.IUserIncrementMapper; import com.fdkankan.ucenter.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.ucenter.util.DateUserUtil; import com.fdkankan.ucenter.vo.request.IncrementParam; import com.fdkankan.ucenter.vo.response.UserIncrementVo; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; /** *

* 用户增值权益表 服务实现类 *

* * @author * @since 2022-07-04 */ @Service public class UserIncrementServiceImpl extends ServiceImpl implements IUserIncrementService { @Autowired ICameraService cameraService; @Autowired IUserService userService; @Autowired ICameraDetailService cameraDetailService; @Autowired ISceneProService sceneProService; @Override public Long getCountByUserId(Long userId, int type) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(UserIncrement::getUserId,userId); if(type == 0){ wrapper.eq(UserIncrement::getIsExpired,0); }else if(type == 1){ wrapper.isNotNull(UserIncrement::getCameraId); } return this.count(wrapper); } @Override public PageInfo pageList(IncrementParam param) { Page pageVo = new Page<>(param.getPageNum(), param.getPageSize()); User user = userService.getByUserName(param.getUserName()); List cameraIdList = null; if(StrUtil.isNotEmpty(param.getSnCode()) && StrUtil.isNotEmpty(param.getSnCode().trim())){ List cameraEntityList = cameraService.getCameraLikeSnCode(param.getSnCode().trim()); if(cameraEntityList == null || cameraEntityList.size()<=0){ return PageInfo.PageInfo(pageVo); } cameraIdList = cameraEntityList.stream().map(Camera::getId) .collect(Collectors.toList()); } Page page = new Page<>(param.getPageNum(), param.getPageSize()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(UserIncrement::getUserId,user.getId()); if(cameraIdList!=null ){ queryWrapper.in(UserIncrement::getCameraId,cameraIdList); } queryWrapper.orderByDesc(UserIncrement::getCreateTime); Page pageEntity = this.page(page, queryWrapper); List responseList = convert(pageEntity.getRecords()); pageVo.setTotal(pageEntity.getTotal()); pageVo.setRecords(responseList); return PageInfo.PageInfo(pageVo); } public List convert(List list) { List result = new ArrayList<>(); if(list == null){ return result; } UserIncrementVo responseUserIncrement = new UserIncrementVo(); for (UserIncrement userIncrementEntity : list) { responseUserIncrement = new UserIncrementVo(); BeanUtils.copyProperties(userIncrementEntity, responseUserIncrement); if(responseUserIncrement.getCameraId() != null){ Camera cameraEntity = cameraService.getById(responseUserIncrement.getCameraId()); responseUserIncrement.setSnCode(cameraEntity != null ? cameraEntity.getSnCode() : null); } responseUserIncrement.setIsExpire(userIncrementEntity.getIsExpired() != 0); result.add(responseUserIncrement); } return result; } @Override public HashMap findByCameraIds(List cameraIdList) { HashMap map = new HashMap<>(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(UserIncrement::getCameraId,cameraIdList); List list = this.list(wrapper); list.forEach(entity -> map.put(entity.getCameraId(),entity)); return map; } @Override public Long getValidCountByCameraId(Long cameraId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(UserIncrement::getCameraId,cameraId); wrapper.gt(UserIncrement::getIncrementEndTime, DateUtil.date2String(new Date(),DateUtil.DEFAULT_DATE_FORMAT)); return this.count(wrapper); } @Override public void unbindCamera(List cameraIds) { LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.set(UserIncrement::getCameraId,null) .in(UserIncrement::getCameraId,cameraIds); this.update(wrapper); } @Override public Long getCount(Long userId, Integer cameraType, int isBind) { return this.getBaseMapper().getCount(userId,cameraType,isBind); } @Override public UserIncrement getByCameraId(Long cameraId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(UserIncrement::getCameraId,cameraId); List list = this.list(wrapper); if(list !=null && list.size() >0){ return list.get(0); } return null; } @Override public void bindCamera(IncrementParam param) { if(param.getId() == null || param.getSnCode() == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } UserIncrement userIncrement = this.getById(param.getId()); if(userIncrement == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3030, LoginConstant.FAILURE_MSG_3030); } Camera cameraEntity = cameraService.getBySnCode(param.getSnCode()); if(cameraEntity == null){ throw new BusinessException(CameraConstant.FAILURE_CODE_6003, CameraConstant.FAILURE_MSG_6003); } UserIncrement byCameraId = this.getByCameraId(cameraEntity.getId()); if(byCameraId != null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3032, LoginConstant.FAILURE_MSG_3032); } CameraDetail cameraDetailEntity = cameraDetailService.getByCameraId(cameraEntity.getId()); if(cameraDetailEntity == null){ throw new BusinessException(CameraConstant.FAILURE_CODE_6003, CameraConstant.FAILURE_MSG_6003); } User user = userService.getByUserName(param.getUserName()); if(user == null){ throw new BusinessException(CameraConstant.FAILURE_CODE_6003, CameraConstant.FAILURE_MSG_6003); } if(cameraDetailEntity.getUserId() == null || !cameraDetailEntity.getUserId().equals(user.getId())){ throw new BusinessException(CameraConstant.FAILURE_CODE_6005, CameraConstant.FAILURE_MSG_6005); } userIncrement.setCameraId(cameraEntity.getId()); userIncrement.setUpdateTime(DateUserUtil.getDate(new Date())); this.updateById(userIncrement); sceneProService.lockOrUnLockBySpace(cameraDetailEntity,cameraEntity.getId(),1); } @Override public void unbindCamera(IncrementParam param) { if(param.getId() == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } UserIncrement userIncrement = this.getById(param.getId()); if(userIncrement == null){ throw new BusinessException(LoginConstant.FAILURE_CODE_3030, LoginConstant.FAILURE_MSG_3030); } if(userIncrement.getCameraId() == null){ return; } CameraDetail cameraDetail = cameraDetailService.getByCameraId(userIncrement.getCameraId()); if(cameraDetail == null){ throw new BusinessException(CameraConstant.FAILURE_CODE_6003, CameraConstant.FAILURE_MSG_6003); } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(UserIncrement::getId,param.getId()); wrapper.set(UserIncrement::getCameraId,null); this.update(wrapper); sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId(),-2); } }