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.common.util.PatternUtils; import com.fdkankan.common.util.SecurityUtil; import com.fdkankan.sms.SendMailAcceUtils; import com.fdkankan.sms.SmsService; import com.fdkankan.ucenter.common.MailUtil; import com.fdkankan.ucenter.common.PageInfo; import com.fdkankan.common.util.DateUtil; import com.fdkankan.ucenter.common.constants.NacosProperty; 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 jodd.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import java.security.GeneralSecurityException; import java.util.*; 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; @Autowired SmsService smsService; @Autowired IMailTemplateService mailTemplateService; @Autowired ICameraIncrementLogService cameraIncrementLogService; @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()); queryWrapper.and(i ->i.eq(UserIncrement::getIsExpired,0).or().isNotNull(UserIncrement::getCameraId)); if(cameraIdList!=null ){ queryWrapper.in(UserIncrement::getCameraId,cameraIdList); } queryWrapper.orderByDesc(UserIncrement::getId); 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) { if(cameraIds.size() >0){ LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.in(UserIncrement::getCameraId,cameraIds); if("local".equals(NacosProperty.uploadType)){ this.remove(wrapper); }else { wrapper.set(UserIncrement::getCameraId,null); this.update(wrapper); } } } @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); } if(userIncrement.getIsExpired() == 1){ 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); cameraIncrementLogService.saveLog(cameraEntity.getId(),userIncrement.getId(),user.getId(),0); sceneProService.lockOrUnLockBySpace(cameraDetailEntity,cameraEntity.getId()); } @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); } User user = userService.getByUserName(param.getUserName()); if(user == null){ throw new BusinessException(CameraConstant.FAILURE_CODE_6003, CameraConstant.FAILURE_MSG_6003); } cameraIncrementLogService.saveLog(userIncrement.getCameraId(),userIncrement.getId(),user.getId(),1); LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(UserIncrement::getId,param.getId()); wrapper.set(UserIncrement::getCameraId,null); this.update(wrapper); if(cameraDetail.getType() !=10){ sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId()); } } @Override public void incrementExpire() { //查找所有刚过期的会员权益 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(UserIncrement::getIsExpired,0); wrapper.lt(UserIncrement::getIncrementEndTime,DateUserUtil.getDate(new Date())); List list = this.list(wrapper); lockScene(list); } public void lockScene(List list){ for (UserIncrement userIncrement : list) { if(DateUserUtil.getDate(userIncrement.getIncrementEndTime()).getTime() > new Date().getTime()){ userIncrement.setIsExpired(0); }else { userIncrement.setIsExpired(1); } userIncrement.setUpdateTime(null); this.updateById(userIncrement); //解除相机权益 if(userIncrement.getCameraId() != null){ CameraDetail cameraDetail = cameraDetailService.getByCameraId(userIncrement.getCameraId()); if(cameraDetail == null){ continue; } if(cameraDetail.getType() !=10){ sceneProService.lockOrUnLockBySpace(cameraDetail,cameraDetail.getCameraId()); } } } } @Override public void incrementExpireSendSms() throws Exception { //查找所有即将到期的会员权益 List expireData30 = this.getBaseMapper().findReadyExpire(30, 0); List expireData15 = this.getBaseMapper().findReadyExpire(15, 0); List expireData5 = this.getBaseMapper().findReadyExpire(5, 0); List expireData3 = this.getBaseMapper().findReadyExpire(3, 0); List expireData0 = this.getBaseMapper().findReadyExpire(0, 0); List expireData = this.getBaseMapper().findReadyExpire(-1, 1); Map userIdsRP = new HashMap<>(); Map userIdsSE = new HashMap<>(); for (UserIncrement userIncrementEntity : expireData30) { if(userIncrementEntity.getUserId() != null){ if(StringUtils.isBlank(userIncrementEntity.getMemberLevels() ) || "PR".equals(userIncrementEntity.getMemberLevels())){ userIdsRP.put(userIncrementEntity.getUserId(), 30); } } } for (UserIncrement userIncrementEntity : expireData15) { if(userIncrementEntity.getUserId() != null){ if(StringUtils.isBlank(userIncrementEntity.getMemberLevels() ) ||"PR".equals(userIncrementEntity.getMemberLevels())){ userIdsRP.put(userIncrementEntity.getUserId(), 15); } } } for (UserIncrement userIncrementEntity : expireData5) { if(userIncrementEntity.getUserId() != null){ if(StringUtils.isBlank(userIncrementEntity.getMemberLevels() ) ||"PR".equals(userIncrementEntity.getMemberLevels())){ userIdsRP.put(userIncrementEntity.getUserId(), 5); } if("SE".equals(userIncrementEntity.getMemberLevels())){ userIdsSE.put(userIncrementEntity.getUserId(), 5); } } } for (UserIncrement userIncrementEntity : expireData3) { if(userIncrementEntity.getUserId() != null){ if("SE".equals(userIncrementEntity.getMemberLevels())){ userIdsSE.put(userIncrementEntity.getUserId(), 3); } } } for (UserIncrement userIncrementEntity : expireData0) { if(userIncrementEntity.getUserId() != null){ if(StringUtils.isBlank(userIncrementEntity.getMemberLevels() ) ||"PR".equals(userIncrementEntity.getMemberLevels())){ userIdsRP.put(userIncrementEntity.getUserId(), 0); } if("SE".equals(userIncrementEntity.getMemberLevels())){ userIdsSE.put(userIncrementEntity.getUserId(), 0); } } } for (UserIncrement userIncrementEntity : expireData) { if(userIncrementEntity.getUserId() != null){ if(StringUtils.isBlank(userIncrementEntity.getMemberLevels() ) ||"PR".equals(userIncrementEntity.getMemberLevels())){ userIdsRP.put(userIncrementEntity.getUserId(), -1); } if("SE".equals(userIncrementEntity.getMemberLevels())){ userIdsSE.put(userIncrementEntity.getUserId(), -1); } } } this.sendMsg(userIdsRP,"premium"); this.sendMsg(userIdsSE,"senior"); } private void sendMsg(Map userIds,String msgType) throws Exception { String cnCode = "SMS_216275556"; String expireCode = "SMS_216425565"; for (Long userId : userIds.keySet()) { User userEntity = userService.getById(userId); if(userEntity != null){ if("oss".equals(NacosProperty.uploadType) && StringUtil.isNotBlank(userEntity.getUserName()) && StringUtils.isNumeric(userEntity.getUserName())){ if(userIds.get(userId) == -1){ smsService.sendSms(userEntity.getUserName(), "{\"time\":\"" + userIds.get(userId) + "\"}", expireCode); continue; } smsService.sendSms(userEntity.getUserName(), "{\"time\":\"" + userIds.get(userId) + "\"}", cnCode); } if("aws".equals(NacosProperty.uploadType) && StringUtil.isNotBlank(userEntity.getUserName())){ Integer days = userIds.get(userId); if(days == null || days<0){ mailTemplateService.sendPeExMail(userEntity.getUserName()); continue; } if(days > 0){ mailTemplateService.sendPeNoExMail(userEntity.getUserName(),userIds.get(userId)); continue; } mailTemplateService.sendPeTodayExMail(userEntity.getUserName()); } } } } @Override public void addByCameraAndUser(List cameraIds, Long userId) { this.delByCameraId(cameraIds); for (Long cameraId : cameraIds) { UserIncrement userIncrement = new UserIncrement(); userIncrement.setKeyWord(UUID.randomUUID().toString().replace("-", "")); userIncrement.setIsExpired(0); userIncrement.setIncrementStartTime(DateUserUtil.getDate(new Date())); userIncrement.setCameraId(cameraId); userIncrement.setIncrementTypeId(1); userIncrement.setIncrementEndTime("2199-01-01 00:00:00"); userIncrement.setUserId(userId); this.save(userIncrement); } } @Override public void delByCameraId(List cameraIds) { if(cameraIds.size() >0){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(UserIncrement::getCameraId,cameraIds); this.remove(wrapper); } } @Override public HashMap> getByOrderSnList(Set orderSns) { HashMap> map = new HashMap<>(); if(orderSns.size() >0){ for (String orderSn : orderSns) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.like(UserIncrement::getOrderSn,orderSn); List list = this.list(wrapper); for (UserIncrement userIncrement : list) { map.computeIfAbsent(userIncrement.getOrderSn(), k -> new ArrayList<>()); map.get(userIncrement.getOrderSn()).add(userIncrement.getId()); } } } return map; } }