package com.fdkankan.ucenter.service.impl; import com.alibaba.fastjson.JSONObject; 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.service.impl.ServiceImpl; import com.fdkankan.common.constant.ConstantRegex; import com.fdkankan.common.constant.ConstantUrl; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.common.util.*; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.ucenter.common.constants.ConstantFilePath; import com.fdkankan.redis.constant.RedisKey; import com.fdkankan.redis.util.RedisUtil; import com.fdkankan.sensitive.Variable; import com.fdkankan.ucenter.common.constants.NacosProperty; import com.fdkankan.ucenter.constant.LoginConstant; import com.fdkankan.ucenter.entity.*; import com.fdkankan.ucenter.mapper.IUserIncrementMapper; import com.fdkankan.ucenter.mapper.IUserMapper; import com.fdkankan.ucenter.service.*; import com.fdkankan.ucenter.util.DateUserUtil; import com.fdkankan.ucenter.vo.request.RegisterParam; import com.fdkankan.ucenter.vo.request.ShipAddressParam; import com.fdkankan.ucenter.vo.request.UserParam; import com.fdkankan.ucenter.vo.response.*; import java.io.File; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import javax.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.joda.time.Days; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; /** *

* 用户信息表 服务实现类 *

* * @author * @since 2022-07-01 */ @Service public class UserServiceImpl extends ServiceImpl implements IUserService { @Value("${fyun.host}") private String osssPrefixUrl; @Autowired ICameraDetailService cameraDetailService; @Autowired IUserIncrementService userIncrementService; @Autowired IIncrementTypeService incrementTypeService; @Autowired IReceiverInfoService receiverInfoService; @Autowired RedisUtil redisUtil; @Autowired FYunFileServiceInterface fYunFileService; @Autowired ICameraService cameraService; @Autowired ICameraSpaceService cameraSpaceService; @Autowired ICameraTypeService cameraTypeService; private User getByEmail(String email){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(User ::getEmail,email); List list = this.list(queryWrapper); if(list == null || list.size()<=0){ return null; } return list.get(0); } @Override public User getByUserName(String phoneNum) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getUserName,phoneNum); List list = this.list(wrapper); if(list != null && list.size() >0){ return list.get(0); } return null; } @Override public void register(RegisterParam param) { User userEntity = new User(); userEntity.setPassword(SecurityUtil.MD5(param.getPassword())); userEntity.setEmail(param.getEmail()); userEntity.setUserName(param.getPhoneNum()); if(StringUtils.isNotBlank(param.getNickName())){ userEntity.setNickName(param.getNickName()); }else { userEntity.setNickName(param.getPhoneNum()); } userEntity.setHead(ConstantUrl.DEFAULT_USER_HEAD); userEntity.setCountry(param.getCountry()); userEntity.setStatus(1); userEntity.setIsNotice(1); userEntity.setRecStatus("A"); userEntity.setCreateTime(DateUserUtil.getDate(new Date())); userEntity.setUpdateTime(DateUserUtil.getDate(new Date())); this.save(userEntity); } @Override public void updatePassword(String phoneNum, String password) { LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.set(User::getPassword,password) .eq(User::getUserName,phoneNum); this.update(wrapper); } @Override public UserVo getUserInfo(String userName) { User user = this.getByUserName(userName); UserVo userVo = new UserVo(); BeanUtils.copyProperties(user,userVo); Long cameraCount = cameraDetailService.getCountByUserId(user.getId(),null); Long incrementNum = userIncrementService.getCountByUserId(user.getId(),0); Long incrementBindNum = userIncrementService.getCountByUserId(user.getId(),1); userVo.setCameraCount(cameraCount); userVo.setIncrementNum(incrementNum); userVo.setIncrementBindNum(incrementBindNum); return userVo; } @Override public String uploadHead(String imgdata, String userName) throws Exception { if (StringUtils.isEmpty(imgdata)){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } User dbUser = this.getByUserName(userName); StringBuilder sb = new StringBuilder().append("head") .append(File.separator).append(dbUser.getUserName()).append(File.separator) .append("head").append("_").append(new Date().getTime()).append(".png"); StringBuilder qiniuPath = new StringBuilder().append("head") .append("/").append(dbUser.getUserName()).append("/") .append("head").append("_").append(new Date().getTime()).append(".png"); FileUtils.uploadImg(ConstantFilePath.USER_IMAGES_PATH + sb.toString(), imgdata); byte[] imageByte = FileUtils.getImageByte(imgdata); //上传头像到oss fYunFileService.uploadFile(imageByte, qiniuPath.toString()); dbUser.setHead(osssPrefixUrl + qiniuPath.toString()+"?m="+System.currentTimeMillis()); this.updateById(dbUser); return dbUser.getHead(); } @Override public void insertAddress(ShipAddressParam param, String userName) { if (StringUtils.isEmpty(param.getShipAddress()) || StringUtils.isEmpty(param.getShipAreaPath()) || StringUtils.isEmpty(param.getProvince()) || StringUtils.isEmpty(param.getCity())){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } User user = getByUserName(userName); receiverInfoService.saveByParam(param,user.getId()); } @Override public void updateAddress(ShipAddressParam param, String userName) { if (param.getId() == null || StringUtils.isEmpty(param.getShipAddress()) || StringUtils.isEmpty(param.getShipAreaPath()) || StringUtils.isEmpty(param.getProvince()) || StringUtils.isEmpty(param.getCity())){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } User user = getByUserName(userName); receiverInfoService.updateDefaultAddress(param,user.getId()); } @Override public void deleteAddress(Long id) { if (id == null ){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } receiverInfoService.removeById(id); } @Override public void updateEmail(String email, String userName) { if (StringUtils.isEmpty(email)){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } if(!email.matches(ConstantRegex.EMAIL_REGEX)){ throw new BusinessException(LoginConstant.FAILURE_CODE_3019, LoginConstant.FAILURE_MSG_3019); } User user = this.getByEmail(email); if(user!=null && !user.getUserName().equals(userName)){ throw new BusinessException(LoginConstant.FAILURE_CODE_3020 , LoginConstant.FAILURE_MSG_3020); } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(User::getUserName,userName); wrapper.set(User::getEmail,email); this.update(wrapper); } @Override public ReceiverInfo getReceiverInfo(String userName) { User dbUser = getByUserName(userName); return receiverInfoService.getDefaultByUserId(dbUser.getId()); } @Override public List getReceiverList(String userName) { User dbUser = getByUserName(userName); return receiverInfoService.getListByUserId(dbUser.getId()); } @Override public void updateNickName(String nickName, String userName) { if (StringUtils.isEmpty(nickName)){ throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001); } //检验昵称敏感词 Set set = Variable.sensitiveWord.getSensitiveWord(nickName, 1); if (set != null && set.size() > 0){ throw new BusinessException(LoginConstant.FAILURE_CODE_3012, LoginConstant.FAILURE_MSG_3012); } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(User::getUserName,userName); wrapper.set(User::getNickName,nickName); this.update(wrapper); } @Override public void updateUserDetail(UserParam param, String userName) { if (param.getNickName() != null){ //检验昵称敏感词 Set set = Variable.sensitiveWord.getSensitiveWord(param.getNickName(), 1); if (set != null && set.size() > 0){ throw new BusinessException(LoginConstant.FAILURE_CODE_3012, LoginConstant.FAILURE_MSG_3012); } } if(param.getEmail() != null && !param.getEmail().matches(ConstantRegex.EMAIL_REGEX)){ throw new BusinessException(LoginConstant.FAILURE_CODE_3019, LoginConstant.FAILURE_MSG_3019); } User emailUser = getByEmail(param.getEmail()); if(emailUser != null && !emailUser.getUserName().equals(userName)){ throw new BusinessException(LoginConstant.FAILURE_CODE_3020 , LoginConstant.FAILURE_MSG_3020); } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(User::getUserName,userName); wrapper.set(User::getNickName,param.getNickName()); wrapper.set(User::getEmail,param.getEmail()); wrapper.set(User::getIsNotice,param.getIsNotice()); this.update(wrapper); } @Override public HashMap getByIds(List userIds) { HashMap map = new HashMap<>(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if(userIds.size() >0){ wrapper.in(User::getId,userIds); List list = this.list(wrapper); list.forEach(entity -> map.put(entity.getId(),entity)); } return map; } @Override public Long getCountByNickName(String nickName) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getNickName,nickName); return this.count(wrapper); } @Override public List getLikeUserName(String userName) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.like(User::getUserName,userName); List collect = this.list(wrapper).parallelStream().map(User::getId).collect(Collectors.toList()); return new ArrayList<>(collect); } @Override public User getByToken(String token) { try { String value = redisUtil.get(String.format(RedisKey.TOKEN_V3, token)); if(StringUtils.isEmpty(value)){ throw new Exception(); } return JSONObject.parseObject(value,User.class); }catch (Exception e){ e.printStackTrace(); } String username = JwtUtil.getUsername(token); return this.getByUserName(username); } @Override public CameraVo findCameraDetailByChildName(String token, String childName) { CameraVo cameraVo = cameraService.getVoByChildName(childName); if(cameraVo == null){ return null; } User userVo = this.getByToken(token); if(userVo != null && userVo.getId()!= null){ User user = this.getById(userVo.getId()); cameraVo.setNickName(user.getNickName()); cameraVo.setNickNameEn(user.getNickName()); }else { switch (cameraVo.getType()){ case 9 : cameraVo.setNickName("Minion设备用户") ; cameraVo.setNickNameEn("4DMinion user") ;break; case 10 : cameraVo.setNickName("四维深时用户"); cameraVo.setNickNameEn("4DMega user"); break; case 11 : cameraVo.setNickName("四维深光用户");cameraVo.setNickNameEn("4DMeta user"); break; default: cameraVo.setNickName("Pro设备用户");cameraVo.setNickNameEn("4DKanKan user"); break; } } List voList = cameraSpaceService.getVoListByCameraId(cameraVo.getId()); if(voList != null && voList.size() > 0){ CameraSpaceVo cameraSpace = voList.get(0); Long space = cameraSpace.getSpace(); cameraVo.setSpaceId(cameraSpace.getId()); cameraVo.setSpace((long) FileSizeUtil.formetFileSize(space, FileSizeUtil.SIZETYPE_GB)); cameraVo.setSpaceStr(FileSizeUtil.formatFileSize(space)); cameraVo.setSpaceEndStr(DateUtil.date2String(cameraSpace.getSpaceEndTime(), DateUtil.YYYY_MM_DD_DATE_FORMAT)); if(Days.daysBetween(new DateTime(), new DateTime(cameraSpace.getSpaceEndTime())).getDays() < 7){ cameraVo.setIsExpire(true); } } //获取会员权益 UserIncrement userIncrement = userIncrementService.getByCameraId(cameraVo.getId()); if(userIncrement != null){ ResponseUserIncrement responseUserIncrement = new ResponseUserIncrement(); BeanUtils.copyProperties(userIncrement,responseUserIncrement); cameraVo.setResponseUserIncrement(responseUserIncrement); cameraVo.setMemberLevels(userIncrement.getMemberLevels()); IncrementType incrementType = incrementTypeService.getById(userIncrement.getIncrementTypeId()); if(incrementType != null && userIncrement.getIsExpired() == 0){ if("GB".equals(cameraVo.getUnit())){ cameraVo.setTotalSpace(String.valueOf(incrementType.getCameraCapacity())); cameraVo.setTotalSpaceStr(incrementType.getCameraCapacity()+".00GB"); } if("SP".equals(cameraVo.getUnit())){ cameraVo.setTotalSpace(String.valueOf(incrementType.getCameraSpace())); cameraVo.setTotalSpaceStr(String.valueOf(incrementType.getCameraSpace())); } } } return cameraVo; } @Override public void updateDownloadNum(long userId, int num) { this.update(new LambdaUpdateWrapper().setSql("download_num = download_num + " + num).eq(User::getId, userId)); } }